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);
}
}
没有评论:
发表评论