Median of Two Sorted Arrays

There are two sorted arrays A and B 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)).

思路:这道题的中心思想是二分。可以转换成找两个合并有序数组的第k大的元素。我们可以如此处理,先比较A和B的第k/2个数大小,每次把小的序列删去k/2个数,保证不会删去第k大数,如果一个序列没有k/2个数,那么就比较第min(m,n)个数的大小,去除一个数组,递归结束。

class Solution {

public:

    double findKSortedArrays(int A[],int m,int B[],int n,int k)

    {

        if(m==0)

            return B[k-1];

        else if(n==0)

            return A[k-1];

        if(k==1)

            return min(A[0],B[0]);

        int index=min(m,n);

        int half=k/2;

        index=min(index,half);

        if(A[index-1]<B[index-1])

        {

            return findKSortedArrays(A+index,m-index,B,n,k-index);

        }

        else

            return findKSortedArrays(A,m,B+index,n-index,k-index);

    }

    double findMedianSortedArrays(int A[], int m, int B[], int n) {

        int total=m+n;

        if(total&0x01)

            return findKSortedArrays(A,m,B,n,total/2+1);

        else

            return (findKSortedArrays(A,m,B,n,total/2+1)+findKSortedArrays(A,m,B,n,total/2))/2;

    }

};

 

你可能感兴趣的:(Arrays)