4. Median of Two Sorted Arrays

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

解题思路:参考https://discuss.leetcode.com/topic/16797/very-concise-o-log-min-m-n-iterative-solution-with-detailed-explanation
找到一个L1<=R1&&L1<=R2&&L2<=R1&&L2<=R2的这个切入位置。切完之后两边的长度是相同的所以会有 切入点1+切入点2=N1+N2
class Solution {
public:
    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
       int N1=nums1.size(),N2=nums2.size();
       if(N1<N2) return findMedianSortedArrays(nums2,nums1);
       if(N2==0) return (nums1[N1/2]+nums1[(N1-1)/2])/2.0;
       int low=0,mid1,mid2,high=N2*2;
       while(low<=high){
           mid2=(low+high)>>1; //cut nums2  cut1+cut=N1+N2
           mid1=N1+N2-mid2;
           double L1=mid1==0?INT_MIN:nums1[(mid1-1)/2];
           double R1=mid1==N1*2?INT_MAX:nums1[mid1/2];
           double L2=mid2==0?INT_MIN:nums2[(mid2-1)/2];
           double R2=mid2==N2*2?INT_MAX:nums2[mid2/2];
           if(L1>R2)low=mid2+1;
           else if(L2>R1)high=mid2-1;
           else return (max(L1,L2)+min(R1,R2))/2;
       }
       return -1;
    }
};

 

posted @ 2017-03-28 19:35  Tsunami_lj  阅读(150)  评论(0编辑  收藏  举报