Friday, August 3, 2018

4. Median of Two Sorted Arrays

    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
        int m = nums1.size(), n = nums2.size();
        if(m > n) return findMedianSortedArrays(nums2, nums1);
        nums1.insert(nums1.begin(), INT_MIN);
        nums2.insert(nums2.begin(), INT_MIN);
        nums1.push_back(INT_MAX);
        nums2.push_back(INT_MAX);
        m = nums1.size();
        n = nums2.size();
        int il = 0, ih = m-1;
        int i, j;
        while(il<=ih) {
            i = (il + ih)/2;           
            j = (m+n+1)/2 - i;           
            if(nums1[i-1]>nums2[j]) {
                ih = i-1;
            }
            else if(nums2[j-1]>nums1[i]) {
                il = i+1;
            }
            else break;
        }
        if((m+n)%2==0) return (max(nums1[i-1],nums2[j-1]) + min(nums1[i],nums2[j]))/2.;
        return max(nums1[i-1], nums2[j-1]);
    }

No comments:

Post a Comment