并不仅限于找到中位数
** 这里的重点是getKth算法 在两个排序好的数组中找到第k小的数 保证A的数组长度小于等于B的长度 先二分,即A中取k/2个数,B中取k/2个数 如果A[k/2-1] < B[k/2-1] 是不是意味着第k个数是在B中,已经判断过了A中前k/2个数所以getKth(A[k/2:],B,k/2) 这样还有一个问题就是如果A的长度小于k/2 所以要做个比较**
class Solution(object):
def findMedianSortedArrays(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: float
"""
len1 = len(nums1)
len2 = len(nums2)
if (len1+len2) % 2 ==0:
return self.getKth(nums1,nums2,(len1+len2)//2+1)*0.5+self.getKth(nums1,nums2,(len1+len2)//2)*0.5
else:
return self.getKth(nums1,nums2,(len1+len2)//2+1)
def getKth(self,A,B,k):
lA, lB = len(A), len(B)
if lA>lB: return self.getKth(B,A,k)
if lA == 0: return B[k-1]
if k == 1: return min(A[0],B[0])
pA = min(k//2,lA)
pB = k - pA
if A[pA-1] < B[pB-1]:
return self.getKth(A[pA:],B,k-pA)
else:
return self.getKth(A,B[pB:],k-pB)