6/20/2014

139. Median of Two Sorted Arrays

public class Solution {
    public double findMedianSortedArrays(int A[], int B[]) {
        int m = A.length;
        int n = B.length;
       
        if ((m+n)%2==1) return kthEle(A, B, (m+n)/2+1, 0, m-1);
        else return (kthEle(A, B, (m+n)/2, 0, m-1)+kthEle(A, B, (m+n)/2+1, 0, m-1))/2.0;
    }
   
    public int kthEle(int A[], int B[], int k, int low, int high) {
        int m = A.length;
        int n = B.length;
       
        if (low>high) return kthEle(B, A, k, 0, n-1);
       
        int i = (low+high)/2;
        int j = k-1-i-1;
       
        if ((j<0 || (j<n && A[i]>=B[j])) && (j+1>=n || j+1>=0 && (A[i]<=B[j+1]))) return A[i];
        else if (j<0 || (j+1<n && A[i]>B[j+1])) return kthEle(A, B, k, low, i-1);
        else return kthEle(A, B, k, i+1, high);
    }
}

没有评论:

发表评论