1. 程式人生 > 實用技巧 >尋找兩個正序陣列的中位數

尋找兩個正序陣列的中位數

問題:尋找兩個正序陣列的中位數

解答:

題解,方法二

class Solution {
public:
    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
        int n = nums1.size();
        int m = nums2.size();

        //保證陣列1一定最短 
        //為了加快速度 對長度短的進行二分
        if (n>m)
        {
            return
findMedianSortedArrays(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; } };