给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。
请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。
示例 1:
nums1 = [1, 3]
nums2 = [2]
中位数是 2.0
示例 2:
nums1 = [1, 2]
nums2 = [3, 4]
中位数是 (2 + 3)/2 = 2.5
思路:两个数组已排序好,故将其合并为一个数组,再按中位数的数学定义得出答案
解决代码:
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int nums1_len=nums1.length;
int nums2_len=nums2.length;
//返回的结果result
double result=0;
int [] nums=new int[nums1_len+nums2_len];
int i=0,j=0,k=0;
//往数组按元素大小插入
while(i<nums1_len && j<nums2_len) {
if(nums1[i]<nums2[j]) {
nums[k++]=nums1[i++];
}else {
nums[k++]=nums2[j++];
}
}
//如果num2的元素未完全插入且num1已插入完全
while(i==nums1_len && j<nums2_len) {
nums[k++]=nums2[j++];
}
//如果num1的元素未完全插入且num2已插入完全
while(i<nums1_len && j==nums2_len) {
nums[k++]=nums1[i++];
}
//判断nums元素个数
if(nums.length%2==0) {
//偶数: [nums(len/2-1)+nums[(len/2)]/2
result=(double)(nums[nums.length/2-1]+nums[nums.length/2])/2;
}else {
//奇数: [nums(len/2-1)/2]
result=(double)nums[(nums.length-1)/2];
}
return result;
}