原題網址
class Solution {
public double findMedianSortedArrays(int[] A, int[] B) {
int len = A.length + B.length;
if (len % 2 == 1) {
return helper(A, 0, B, 0, len / 2 + 1);
} else {
return (helper(A, 0, B, 0, len / 2) + helper(A, 0, B, 0, len / 2 + 1)) / 2.0;
}
}
public int helper(int[] A, int startA, int[] B, int startB, int k) {
if (startA >= A.length) {
return B[startB + k - 1];
}
if (startB >= B.length) {
return A[startA + k - 1];
}
if (k == 1) {
return Integer.min(A[startA], B[startB]);
}
int keyA = startA + k / 2 - 1 < A.length ? A[startA + k / 2 - 1] : Integer.MAX_VALUE;
int keyB = startB + k / 2 - 1 < B.length ? B[startB + k / 2 - 1] : Integer.MAX_VALUE;
if (keyA < keyB) {
return helper(A, startA + k / 2, B, startB, k - k / 2);
} else {
return helper(A, startA, B, startB + k / 2, k - k / 2);
}
}
}