給定兩個(gè)大小為 m 和 n 的有序數(shù)組 nums1 和 nums2 。
請(qǐng)找出這兩個(gè)有序數(shù)組的中位數(shù)。要求算法的時(shí)間復(fù)雜度為 O(log (m+n)) 。
示例 1:
nums1 = [1, 3]
nums2 = [2]
中位數(shù)是 2.0
示例 2:
nums1 = [1, 2]
nums2 = [3, 4]
中位數(shù)是 (2 + 3)/2 = 2.5
思路:兩個(gè)數(shù)組已排序好,故將其合并為一個(gè)數(shù)組,再按中位數(shù)的數(shù)學(xué)定義得出答案
解決代碼:
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int nums1_len=nums1.length;
int nums2_len=nums2.length;
//返回的結(jié)果result
double result=0;
int [] nums=new int[nums1_len+nums2_len];
int i=0,j=0,k=0;
//往數(shù)組按元素大小插入
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元素個(gè)數(shù)
if(nums.length%2==0) {
//偶數(shù): [nums(len/2-1)+nums[(len/2)]/2
result=(double)(nums[nums.length/2-1]+nums[nums.length/2])/2;
}else {
//奇數(shù): [nums(len/2-1)/2]
result=(double)nums[(nums.length-1)/2];
}
return result;
}