寻找两个正序数组的中位数

51 阅读1分钟
  • 今天刷的这道题是有一点点难度的,不过思路还算清晰,但是我也是提交了三次才完全正确,在代码报错的时候,debug是最好的定位报错的方式,仅仅在那看代码的话,是很难看出问题的。

给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。

算法的时间复杂度应该为 O(log (m+n)) 。

int length1 = nums1.length;
int length2 = nums2.length;
int totalLength = length1 + length2;
int[] mergeNums = new int[totalLength];
int i = 0;
int j = 0;
int count = 0;
while (i < length1 && j < length2) {
    if (nums1[i] <= nums2[j]) {
        mergeNums[count++] = nums1[i++];
    } else {
        mergeNums[count++] = nums2[j++];
    }
}
if (i != length1) {
    while (i < length1) {
        mergeNums[count++] = nums1[i++];
    }
}
if (j != length2) {
    while (j < length2) {
        mergeNums[count++] = nums2[j++];
    }
}
if (totalLength % 2 == 0) {
    return (mergeNums[totalLength / 2] + mergeNums[totalLength / 2 - 1]) / 2.0;
} else {
    return mergeNums[totalLength / 2];
}

这道题的内存消耗和执行用时都不算很优,有其他更好思路的小伙伴欢迎指导~