寻找两个正序数组的中位数
两个数组合并
简单粗暴,先将两个数组合并,两个有序数组的合并也是归并排序中的一部分。然后根据奇数,还是偶数,返回中位数。
直接查找中位数
- 两个数组总个数为奇数,找到中位数 med2
- 两个数组总个数为偶数,找到中位数 (med1+med2)/2
注意:判断(len % 2) == 0 或 (len & 1) == 0
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int m = nums1.length;
int n = nums2.length;
int len = m + n;
int med1 = -1, med2 = -1;
int a = 0, b = 0;
for (int i = 0; i <= len / 2; i++) {
med1 = med2;
if (a < m && (b >= n || nums1[a] < nums2[b])) {
med2 = nums1[a++];
} else {
med2 = nums2[b++];
}
}
//(len & 1) == 0
if ((len % 2) == 0)
return (med1 + med2) / 2.0;
else
return med2;
}
}