1. 题目

004-Median_of_two_sorted_arrays


2. 算法

http://blog.csdn.net/yutianzuijin/article/details/11499917/

  • 要求复杂度O(nlg(n+m))

* 思路

  • 将原问题转换为一个寻找第k小数的问题

  • 边界条件

3. 代码

class Solution {
public:
    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
        int total=nums1.size()+nums2.size();
        if(total &0x1)
            return findkth(nums1,nums2,total/2+1);
        else{
            vector<int>a,b;
            a.assign(nums1.begin(),nums1.end());
            b.assign(nums2.begin(),nums2.end());
            return (findkth(nums1,nums2,total/2)+findkth(nums1,nums2,total/2+1))/2.0;
        }

    }

    double findkth(vector<int>& A,vector<int>& B,int k){
        int m=A.size();
        int n=B.size();
        if(m>n)  return findkth(B,A,k);
        if(m==0)  return B[k-1];
        if(k==1)  return min(A[0],B[0]);

        int pa=min(k/2,m),pb=k-pa;
        if(A[pa-1]<B[pb-1]){
            A.erase(A.begin(),A.begin()+pa);
            return findkth(A,B,k-pa);
        }else if(A[pa-1]>B[pb-1]){
            B.erase(B.begin(),B.begin()+pb);
            return findkth(A,B,k-pb);
        }else{
            return A[pa-1];
        }
    }
};

results matching ""

    No results matching ""