There are two sorted arrays nums1 and nums2 of size m and n respectively.
Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).
Example 1:
nums1 = [1, 3] nums2 = [2] The median is 2.0
Example 2:
nums1 = [1, 2] nums2 = [3, 4] The median is (2 + 3)/2 = 2.5
分析:类似于求分治法排序的思路,重点对两个已排好序的数组合并,直至找到中位数为止.
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int n1=nums1.size(),n2=nums2.size();
if(n1+n2<=0) return 0;
int m1=0,flag=0;
if((n1+n2)%2) m1=(n1+n2)/2+1;
else {
flag=1;//是偶数时为真
m1=(n1+n2)/2;
}
int i,j,idx=0;
double sum=0;
for(i=0,j=0;idx<m1;)
{
if((i<n1&&j<n2&&nums1[i]<nums2[j])||(j>=n2))
{
idx++;
if(idx==m1)
sum+=nums1[i];
i++;
}else
{
idx++;
if(idx==m1)
sum+=nums2[j];
j++;
}
}
if(flag&&i<n1&&j<n2) {sum+=(nums1[i]<nums2[j]?nums1[i]:nums2[j]);sum/=2;}
else if(flag&&i>=n1){
sum+=nums2[j];
sum/=2;
}else if(flag)
{
sum+=nums1[i];
sum/=2;
}
return sum;
}
};