题意:
寻找两个已经从小到大排好序的数组的中位数。
思路:
大概是比较投机取巧的一种方法,时间复杂度为O ( n )的。
先计算两个数组的元素个数总和,分奇偶讨论。
如果是奇数的话,中位数是第(sum+1)/2个数;否则,是中间两个数的平均数。
分别设两个指针tx,ty,用来遍历两个数组。
每次都让当前数的指针前移。
最后维护下中位数就好了~
代码:
class Solution { public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int x=nums1.size(),y=nums2.size(); int sum=x+y; double ans; if(sum%2){ int t=(sum+1)/2; //cout<<t<<endl; int tx=0,ty=0; while(t--){ if(tx<x&&ty<y){ if(nums1[tx]<nums2[ty]) ans=nums1[tx],tx++; else ans=nums2[ty],ty++; } else if(tx<x&&ty==y){ ans=nums1[tx],tx++; } else if(ty<y&&tx==x){ ans=nums2[ty],ty++; } //cout<<tx<<" "<<ty<<" "<<ans<<endl; } } else{ double ans1,ans2; int t=sum/2+1; int tx=0,ty=0; while(t--){ ans1=ans2; if(tx<x&&ty<y){ if(nums1[tx]<nums2[ty]) ans2=nums1[tx],tx++; else ans2=nums2[ty],ty++; } else if(tx<x){ ans2=nums1[tx],tx++; } else if(ty<y){ ans2=nums2[ty],ty++; } } ans=(ans1+ans2)/2.0; } return ans; } };