这道题好难。。。
不是完全能看懂别人的解法,先记下来,以后再琢磨。。。╮(╯▽╰)╭
class Solution {
public:
double findMedianSortedArrays(int A[], int m, int B[], int n)
{
int total = m + n;
if (total & 0x1)
return find_kth(A, m, B, n, total / 2 + 1);
else
return find_kth(A, m, B, n, total) / 2 + find_kth(A, m, B, n, total / 2 + 1);
}
private:
static double find_kth(int A[], int m, int B[], int n, int k)
{
if (m > n)return find_kth(B, n, A, m, k);
if (m == 0)return B[k - 1];
if (k == 1)return min(A[0], B[0]);
int partA = min(k / 2, m), partB = k - partA;
if (A[partA - 1] < B[partB - 1])
return find_kth(A + partA, m - partA, B, n, k - partA);
else if (A[partA - 1] > B[partB - 1])
return find_kth(A, m, B + partB, n - partB, k - partB);
else
return A[partB - 1];
}
};