给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数 。
算法的时间复杂度应该为 O(log (m+n)) 。
示例 1:
题解输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2
思路比较简单,因为都是升序,统计前面遍历过的个数。到达中位数条件时直接返回就行。主要是注意各种边界问题。我的代码:时间超越100%用户,空间击败8.86%,括弧笑¬_¬…(* ̄0 ̄)ノ。感觉空间还可以优化,有些变量可以舍去,如:count==i+j和medianNum也有办法舍去。
Codeclass Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
double medianNum = 0;
int i = 0, j = 0, count = 0;
while (true) {
if (i < nums1.length && j < nums2.length) {
if (nums1[i] <= nums2[j]) {
medianNum = nums1[i];
i++;
} else {
medianNum = nums2[j];
j++;
}
} else if (i < nums1.length) {
medianNum = nums1[i];
i++;
}
else if (j < nums2.length) {
medianNum = nums2[j];
j++;
}
else {
break;
}
if ((nums1.length + nums2.length) % 2 == 1) {
if (count == (nums1.length + nums2.length) / 2)
return medianNum;
} else {
if (count == (nums1.length + nums2.length) / 2 - 1) {
if (i < nums1.length && j < nums2.length) {
if (nums1[i] <= nums2[j])
return (medianNum + nums1[i]) / 2;
else
return (medianNum + nums2[j]) / 2;
} else if (i < nums1.length) {
return (medianNum + nums1[i]) / 2;
} else return (medianNum + nums2[j]) / 2;
}
}
count++;
}
return 0;
}
}



