Q: 目前有两个已经排序好的数组(从⼩小到⼤大) A,B, 请求出两个数组合并之后 的median。
思路:当两个数组合并后的总元素长度是奇数时,中位数的下标是n/2。 当两个数组合并后的总元素个数是偶数时,中位数是下标n/2-1和下标n/2两个元素的平均值。运用递归法求A,B中第k个值。
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, B, n / 2 + 1)
else:
smaller = self.findKth(A, B, n / 2)
bigger = self.findKth(A, B, n / 2 + 1)
return (smaller + bigger) / 2.0
def findKth(self, A, B, k):
if len(A) == 0:
return B[k - 1]
if len(B) == 0:
return A[k - 1]
if k == 1:
return min(A[0], B[0])
a = A[k / 2 - 1] if len(A) >= k / 2 else None