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)).
Solution:
Code:
<span style="font-size:14px;">class Solution {
public:
double findK (int A[], int m, int B[], int n, int k) {
if (m == 0) return B[k-1];
if (n == 0) return A[k-1];
if (k == 1) return min(A[0], B[0]);
if (m > n) return findK(B, n, A, m, k);
int kA = min(m, k/2);
int kB = k-kA;
if (A[kA-1] == B[kB-1]) return A[kA-1];
else if (A[kA-1] < B[kB-1]) return findK(A+kA, m-kA, B, n, k-kA);
else return findK(A, m, B+kB, n-kB, k-kB);
}
double findMedianSortedArrays(int A[], int m, int B[], int n) {
if ((m+n)%2) return findK(A, m, B, n, (m+n)/2+1);
else return (findK(A, m, B, n, (m+n)/2)+findK(A, m, B, n, (m+n)/2+1))/2;
}
};</span>