Median of Two Sorted Arrays(C++)

class Solution {
public:
    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) 
    {
        int m=nums1.size(),n=nums2.size();
        if((m+n)%2==1)
            return findKth(nums1,nums2,(m+n+1)/2);
        else
            return (findKth(nums1,nums2,(m+n)/2)+findKth(nums1,nums2,(m+n)/2+1))/2.0;
    }
    int findKth(vector<int> nums1,vector<int> nums2,int k)
    {
        int m=nums1.size(),n=nums2.size();
        if(m>n)
            return findKth(nums2,nums1,k);
        if(m==0)
            return nums2[k-1];
        if(k==1)
            return min(nums1[0],nums2[0]);
        int i=min(m,k/2),j=min(n,k/2);
        if(nums1[i-1]>nums2[j-1])
            return findKth(nums1,vector<int>(nums2.begin()+j,nums2.end()),k-j);
        else
            return findKth(vector<int>(nums1.begin()+i,nums1.end()),nums2,k-i);
    }
};

猜你喜欢

转载自blog.csdn.net/zrh_csdn/article/details/80325817
今日推荐