65.Median of two Sorted Arrays
1.Description(Hard)
There are two sorted arrays_A_and_B_of size_m_and_n_respectively. Find themedianof the two sorted arrays.
Example
GivenA=[1,2,3,4,5,6]
andB=[2,3,4,5]
, the median is3.5
.
GivenA=[1,2,3]
andB=[4,5]
, the median is3
.
The overall run time complexity should beO(log (m+n))
.
2.Code
根据复杂度推断算法--summary--find kth number
1.先merge再取median ---O(m+n)(linear algorithm)--优化--O(n) binary search(核心:在O(1)时间内把O(n)变成O(n/2))
2.find median--find kth (n+m)/2 从小到大第k个数--logk--log(n+m)/2
http://bangbingsyb.blogspot.ca/2014/11/leetcode-median-of-two-sorted-arrays.html
http://fisherlei.blogspot.ca/2012/12/leetcode-median-of-two-sorted-arrays.html
http://m.blog.csdn.net/article/details?id=11499917
http://www.programcreek.com/2012/12/leetcode-median-of-two-sorted-arrays-java/
O(n)的解法比较直观,直接merge两个数组,然后求中间值。而对于O(log(m+n))显然是用二分搜索了, 相当于“Kth element in 2 sorted array”的变形。如果(m+n)为奇数,那么找到“(m+n)/2+1 th element in 2 sorted array”即可。如果(m+n)为偶数,需要找到(m+n)/2 th 及(m+n)/2+1 th,然后求平均。
而对于“Kth element in 2 sorted array”, 如下图,两个中位数 A[m/2] 和 B[n/2], 可以将数组划分为四个部分。而丢弃哪一个部分取决于两个条件:1, (m/2 + n/2)?k;2,A[m/2] ? B[n/2];
如果 (m/2 + n/2) > k,那么意味着,当前中位数取高了,正确的中位数要么在 Section 1或者Section3中。如果A[m/2] >
B[n/2], 意味着中位数肯定不可能在Section 2里面,那么新的搜索可以丢弃这个区间段了。同理可以推断出余下三种情况,如下所示:
简单的说,就是或者丢弃最大中位数的右区间,或者丢弃最小中位数的左区间。
Last updated