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:
double findMedianSortedArrays(int A[], int m, int B[], int n) { int total = m + n; if (0 == total % 2) { return (FindKth(A, m, B, n, total/2) + FindKth(A, m, B, n, total/2 + 1)) / 2; } else { return FindKth(A, m, B, n, total/2 + 1); } } double FindKth(int A[], int m, int B[], int n, int k) { if (m > n) return FindKth(B, n, A, m, k); if (0 == m) return B[k-1]; if (0 == n) return A[k-1]; if (1 == k) return min(A[0], B[0]); int aMid = min(k/2, m); int bMid = k - aMid; if (A[aMid-1] < B[bMid-1]) { return FindKth(A + aMid, m - aMid, B, n, k - aMid); } else { return FindKth(A, m, B + bMid, n - bMid, k - bMid); } }
Complexity:
time - O(log n)Links and credits:
space - O(log n) (for recursion stack; could be optimized to O(1) using iterative approach)
http://discuss.leetcode.com/questions/142/median-of-two-sorted-arrays
No comments:
Post a Comment