给定两个大小为 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
代码:
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int len1=nums1.size();
int len2=nums2.size();
int len=(len1+len2)/2;
vector<int>res(len+1,0);//将两个数组的元素按从小到大的顺序依次放入新数组中
int k=0,i=0,j=0;//i是nums1的下标,j是nums2的下标
while(i<len1&&j<len2&&k<=len){//i,j都未超过数组的下标
if(nums1[i]<nums2[j]){//将nums1和nums2中i,j指向的小的那个元素放入新数组res中
res[k++]=nums1[i++];
}else{
res[k++]=nums2[j++];
}
}
while(i<len1&&k<=len)//j指向的nums2的元素扫描完了
res[k++]=nums1[i++];
while(j<len2&&k<=len)//i指向的nums1的元素扫描完了
res[k++]=nums2[j++];
return (len1+len2)%2==0?(res[k-1]+res[k-2])/2.0:res[k-1];//判断两个数组长度的和是否为偶数,若为偶数,中位数则是中间两数的一半
}//否则,中位数是中间的那个数。
};