题目
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大的数,需要十分小心边界条件。
代码
public class MedianOfTwoSortedArrays {
public double findMedianSortedArrays(int A[], int B[]) {
int M = A.length;
int N = B.length;
int total = M + N;
if (total % 2 == 0) {
return (solve(A, B, total / 2, 0, M - 1, 0, N - 1) + solve(A, B,
total / 2 + 1, 0, M - 1, 0, N - 1)) / 2;
} else {
return solve(A, B, total / 2 + 1, 0, M - 1, 0, N - 1);
}
}
private double solve(int A[], int B[], int k, int aStart, int aEnd,
int bStart, int bEnd) {
if (aEnd - aStart > bEnd - bStart) {
return solve(B, A, k, bStart, bEnd, aStart, aEnd);
}
if (aEnd < aStart) {
return B[k - 1];
}
if (k == 1) {
return Math.min(A[aStart], B[bStart]);
}
int partASize = Math.min(k / 2, aEnd - aStart + 1);
int pA = aStart + partASize;
int pB = bStart + k - partASize;
if (A[pA - 1] < B[pB - 1]) {
return solve(A, B, k - partASize, pA, aEnd, bStart, bEnd);
} else if (A[pA - 1] > B[pB - 1]) {
return solve(A, B, partASize, aStart, aEnd, bStart + k - partASize,
bEnd);
} else {
return A[pA - 1];
}
}
}