【ATT】Median of Two Sorted Arrays

findKthTwoSortedArray的应用。

double findMedianSortedArrays(int A[], int m, int B[], int n) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        if(((m+n)&0x1)!=0) //odd
        {
            return findKthSortedArrays(A,m,B,n,(m+n+1)>>1);
        }else
        {
            int median1 = findKthSortedArrays(A,m,B,n,(m+n)>>1);
            int median2 = findKthSortedArrays(A,m,B,n,((m+n)>>1)+1);
            return ((double)median1+median2)/2;
        }
    }
    
    int findKthSortedArrays(int A[],int m,int B[],int n,int k)
    {
        int i = (int)((double)m/(m+n)*(k-1));
        int j = k-1-i;
        int Ai_1 = (i==0?INT_MIN:A[i-1]);
        int Ai = (i==m?INT_MAX:A[i]);
        int Bj_1 = (j==0?INT_MIN:B[j-1]);
        int Bj = (j==n?INT_MAX:B[j]);
        
        if(Ai>=Bj_1&&Ai<=Bj)
            return Ai;
        if(Bj>=Ai_1&&Bj<=Ai)
            return Bj;
        
        if(Ai>Bj)
            return findKthSortedArrays(A,i,B+j+1,n-j-1,k-j-1);
        else
            return findKthSortedArrays(A+i+1,m-i-1,B,j,k-i-1);
        
    }

  

posted @ 2013-10-04 12:02  summer_zhou  阅读(128)  评论(0编辑  收藏  举报