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)).
Divide and Conquer Array Binary Searchdouble findMedianSortedArrays(int A[], int m, int B[], int n) {
//此题难度指数比较高,写完之后竟然过了,自己逻辑思维还是混乱的,细节问题仍然是不清楚的,此题需要多练
if ((m + n) % 2)
return findKth((m + n) >> 1, A, m, B, n);
else
return (findKth((m + n - 1) >> 1, A, m, B, n) + findKth((m + n) >> 1, A, m, B, n)) / 2.0;
}
int findKth(int k, int A[], int m, int B[], int n)
{
int low1 = 0, high1 = m, low2 = 0, high2 = n, mid1, mid2;
while (low1 < high1 && low2 < high2)
{
mid1 = (high1 + low1) / 2;
mid2 = (high2 + low2) / 2;
//此处考虑需全面细致,关键就是这部分代码如何转换,最后我要达到的有一个数组经二分搜索搜索完了,
if (mid1 + mid2 >= k)
{
if (A[mid1] < B[mid2])
high2 = mid2;
else
high1 = mid1;
}
else
{
if (A[mid1] < B[mid2])
low1 = mid1 + 1;
else
low2 = mid2 + 1;
}
}
if (low1 == high1)
return B[k - low1];
else
return A[k - low2];
}