问题描述
给定两个排序过的数组,求这两个排序数组的中位数, 在O(log(min(n, m)))内。
解题思路
将所有元素重组成有序的两部分,中位数就在段点处
def find_median(a, b):
#if len(a) > len(b):
# a, b = b, a
imin, imax = 0, len(a)
n, m = len(a), len(b)
while imin <= imax :
i = ( imin + imax ) // 2
j = ( n + m + 1) // 2 - i
if i < n and j > 0 and b[j - 1] > a[i]:
#i is too small
imin = i + 1
elif i > 0 and j < m and b[j] < a[i-1]:
# i is too big
imax = i - 1
else:
# desired case
if i == 0:
return b[j-1]
elif j ==0:
return a[i-1]
else:
return max(a[i-1], b[j-1])