Leetcode(4)之寻找两个有序数组的中位数
2019-12-31 15:12
225 查看
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
题目描述:
解题思路:
可以转换思路,把这题看成是找这两个有序数组中第k小的数(假如两个数组共有11个数,就是找第6小的数;如果共有12个数,就是找第6和第7小数的平均数)。起始时两个数组的下标都为0,当找第k小数时可以先比较两个数组中 k/2下标的数,小的一方说明前面 k/2个数肯定不会是第k小的数了。然后将小的一个数组的下标改为 k/2,k的值也可以减去 k/2,然后从剩下的数里面找第 k-(k/2) 小的数。
代码:
public double FindMedianSortedArrays(int[] nums1, int[] nums2) { bool isEven = (nums1.Length + nums2.Length) % 2 == 0; //两个数组总个数是否是偶数 int k = isEven ? (nums1.Length + nums2.Length) / 2 : (nums1.Length + nums2.Length + 2) / 2; return FindKthNum(isEven, k, 0, 0, nums1, nums2); } private double FindKthNum(bool isEven, int k, int p1, int p2, int[] nums1, int[] nums2) { if (p1 == nums1.Length) { if (isEven) return (nums2[p2 + k - 1] + nums2[p2 + k]) / 2.0; else return nums2[p2 + k - 1]; } if (p2 == nums2.Length) { if (isEven) return (nums1[p1 + k - 1] + nums1[p1 + k]) / 2.0; else return nums1[p1 + k - 1]; } if (k == 1) { if (isEven) { if (p1 + 1 < nums1.Length && nums1[p1 + 1] < nums2[p2]) return (nums1[p1] + nums1[p1 + 1]) / 2.0; if (p2 + 1 < nums2.Length && nums2[p2 + 1] < nums1[p1]) return (nums2[p2] + nums2[p2 + 1]) / 2.0; else return (nums1[p1] + nums2[p2]) / 2.0; } else return Mathf.Min(nums1[p1], nums2[p2]); } int q1 = p1 + k / 2 > nums1.Length ? nums1.Length : p1 + k / 2; int q2 = p2 + k / 2 > nums2.Length ? nums2.Length : p2 + k / 2; if (nums1[q1 - 1] > nums2[q2 - 1]) { k = k - (q2 - p2); p2 = q2; return FindKthNum(isEven, k, p1, p2, nums1, nums2); } else { k = k - (q1 - p1); p1 = q1; return FindKthNum(isEven, k, p1, p2, nums1, nums2); } }
相关文章推荐
- [leetcode 4] 寻找两个有序数组的中位数 python
- 寻找两个有序数组的中位数(LeetCode)
- leetcode之数组类之数组的旋转与分治类-----OJ 189/33/81/153/154 数组旋转 旋转数组搜索 88 有序数组合并 4 两个有序数组寻找第K个元素/中位数 35 寻找插入位置
- 【leetcode】4. 寻找两个有序数组的中位数
- LeetCode刷题:第四题 寻找两个有序数组的中位数
- Leetcode_4_寻找两个有序数组的中位数
- LeetCode--4. 寻找两个有序数组的中位数(Median of Two Sorted Arrays)
- LeetCode刷题-寻找两个有序数组的中位数
- leetcode寻找两个有序数组的中位数C++版
- [LeetCode]4. 寻找两个有序数组的中位数/C++
- LeetCode4 寻找两个有序数组的中位数 Median of Two Sorted Arrays
- Leetcode-寻找两个有序数组的中位数
- leetcode4 寻找两个有序数组的中位数 python
- [leetcode] Median of Two Sorted Arrays 寻找两个有序数组的中位数
- leetcode 4.寻找两个有序数组的中位数
- leetcode 4. 寻找两个有序数组的中位数
- 【LeetCode】第四题:寻找两个有序数组的中位数
- Datawhale-LeetCode集训打卡-寻找两个有序数组的中位数
- leetCode---寻找两个有序数组的中位数
- [leetcode] 4-寻找两个有序数组的中位数