注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号 
x
这个是网上看到的解法, 就是针对A和B分别二分, 然后网上说时间复杂度是log(m+n), m=len(A), n=len(B), 就想问为什么不是logm+logn? 多谢!
class Solution:
"""
@param A: An integer array.
@param B: An integer array.
@return: a double whose format is *.5 or *.0
"""
def findMedianSortedArrays(self, A, B):
n = len(A) + len(B)
if n % 2 == 1:
return self.findKth(A, 0, B, 0, n // 2 + 1)
else:
smaller = self.findKth(A, 0, B, 0, n // 2)
bigger = self.findKth(A, 0, B, 0, n // 2 + 1)
return (smaller + bigger) / 2
def findKth(self, A, index_a, B, index_b, k):
if len(A) == index_a:
return B[index_b + k - 1]
if len(B) == index_b:
return A[index_a + k - 1]
if k == 1:
return min(A[index_a], B[index_b])
a = A[index_a + k // 2 - 1] if index_a + k // 2 <= len(A) else None
b = B[index_b + k // 2 - 1] if index_b + k // 2 <= len(B) else None
if b is None or (a is not None and a < b):
return self.findKth(A, index_a + k // 2, B, index_b, k - k // 2)
return self.findKth(A, index_a, B, index_b + k // 2, k - k // 2)
|