题目
给定两个有序数组,寻找数组的中位数,要求时间复杂度为O(log(m+n))
解决思路如下:
创建一个数组存放合并后的数组nums,利用归并排序的思想,将两个数组依次加入合并后的数组,当个数为奇数个时,中位数为第nums/2
个,偶数时为第nums和nums-1
两数的平均值
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int[] nums;
int m = nums1.length;
int n = nums2.length;
nums = new int[m + n];
if (m == 0) {
if (n % 2 == 0) {
return (nums2[n / 2 - 1] + nums2[n / 2]) / 2.0;
} else {
return nums2[n / 2];
}
}
if (n == 0) {
if (m % 2 == 0) {
return (nums1[m / 2 - 1] + nums1[m / 2]) / 2.0;
} else {
return nums1[m / 2];
}
}
int count = 0;
int i = 0, j = 0;
while (count != (m + n)) {
if (i == m) {
while (j != n) {
nums[count++] = nums2[j++];
}
break;
}
if (j == n) {
while (i != m) {
nums[count++] = nums1[i++];
}
break;
}
if (nums1[i] < nums2[j]) {
nums[count++] = nums1[i++];
} else {
nums[count++] = nums2[j++];
}
}
if (count % 2 == 0) {
return (nums[count / 2 - 1] + nums[count / 2]) / 2.0;
} else {
return nums[count / 2];
}
}
}
以上为基础解法,时间复杂度不满足题目要求,题目要求时间复杂度为O(log(m+n)),应该利用二分查找的思想
原作者链接