1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| class Solution { public double findMedianSortedArrays(int[] A, int[] B) { int na = A.length, nb = B.length; int n = na + nb; return (double)(solve(A, B, n / 2, 0, na - 1, 0, nb - 1) + solve(A, B, (n -1)/ 2 , 0, na - 1, 0, nb - 1)) / 2; } } public int solve(int[] A, int[] B, int k, int aStart, int aEnd, int bStart, int bEnd) { if (aEnd < aStart) { return B[k - aStart]; } if (bEnd < bStart) { return A[k - bStart]; } int aIndex = (aStart + aEnd) / 2, bIndex = (bStart + bEnd) / 2; int aValue = A[aIndex], bValue = B[bIndex]; if (aIndex + bIndex < k) { if (aValue >= bValue) { return solve(A, B, k, aStart, aEnd, bIndex + 1, bEnd); } else { return solve(A, B, k, aIndex + 1, aEnd, bStart, bEnd); } } else { if (aValue >= bValue) { return solve(A, B, k, aStart, aIndex - 1, bStart, bEnd); } else { return solve(A, B, k, aStart, aEnd, bStart, bIndex - 1); } } } }
|