public class Solution {
public double findMedianSortedArrays(int A[], int B[]) {
int aLen = A.length;
int bLen = B.length;
if((aLen+bLen) % 2 == 0){
return (getKthElement(A, 0, aLen-1, B, 0, bLen-1, (aLen+bLen)/2)
+ getKthElement(A, 0, aLen-1, B, 0, bLen-1, (aLen+bLen)/2 + 1)) / 2.0 ;
} else {
return getKthElement(A, 0, aLen-1, B, 0, bLen-1, (aLen+bLen)/2+1);
}
}
public int getKthElement(int A[], int aBeg, int aEnd, int B[], int bBeg, int bEnd, int k){
if(aBeg > aEnd){
return B[bBeg+(k-1)];
}
if(bBeg > bEnd){
return A[aBeg+(k-1)];
}
int aMid = (aBeg+aEnd) >>1;
int bMid = (bBeg+bEnd) >>1;
int len = aMid - aBeg + bMid -bBeg +2;
if(len > k) {
if(A[aMid] < B[bMid]){
return getKthElement(A, aBeg, aEnd, B, bBeg, bMid-1, k);
}else{
return getKthElement(A, aBeg, aMid-1, B, bBeg, bEnd, k);
}
}else {
if(A[aMid] < B[bMid]){
return getKthElement(A, aMid+1, aEnd, B, bBeg, bEnd, k - (aMid-aBeg+1));
} else {
return getKthElement(A, aBeg, aEnd, B, bMid+1, bEnd, k - (bMid-bBeg+1));
}
}
}
}