尋找兩個正序陣列的中位數
阿新 • • 發佈:2020-07-25
問題:尋找兩個正序陣列的中位數
解答:
題解,方法二
class Solution { public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int n = nums1.size(); int m = nums2.size(); //保證陣列1一定最短 //為了加快速度 對長度短的進行二分 if (n>m) { returnfindMedianSortedArrays(nums2,nums1); } int lmax1 = 0, lmax2 = 0, rmin1 = 0, rmin2 = 0; int c1,c2; int low = 0,high = n; while(low<=high) { c1 = (high+low+1)/2; c2 = (m+n)/2-c1; lmax1 = c1==0 ? INT_MIN : nums1[c1-1]; rmin1= c1==n ? INT_MAX : nums1[c1]; lmax2 = c2==0 ? INT_MIN : nums2[c2-1]; rmin2 = c2==m ? INT_MAX : nums2[c2]; if(lmax1>rmin2) { high = c1-1; } else if (lmax2>rmin1) { low = c1+1; }else break; } cout<<lmax1<<" "<<lmax2<<" "<<rmin1<<" "<<rmin2<<endl; if((m+n)%2) return min(rmin1,rmin2); else return (max(lmax1,lmax2)+min(rmin1,rmin2))/2.0; } };