def findKth(self,a,b,k,aStart,aEnd,bStart,bEnd):
aLen = aEnd - aStart + 1
bLen = bEnd - bStart + 1
if aLen == 0:
return b[bStart+k]
if bLen == 0:
return a[aStart+k]
if k == 0:
if a[aStart] > b[bStart]:
return b[bStart]
else:
return a[aStart]
aMid = k*aLen/(aLen + bLen)
bMid = k - aMid - 1
aMid+=aStart
bMid+=bStart
if a[aMid] > b[bMid]:
k-=(bMid - bStart + 1)
aEnd = aMid
bStart = bMid + 1
else:
k-= (aMid - aStart + 1)
bEnd = bMid
aStart = aMid + 1
return self.findKth(a,b,k,aStart,aEnd,bStart,bEnd)
def findMedianSortedArrays(self, nums1, nums2):
lenN1 = len(nums1)
lenN2 = len(nums2)
if (len(nums1) + len(nums2)) % 2 == 0:
return (self.findKth(nums1,nums2,(len(nums1)+len(nums2))/2,0,len(nums1)-1,0,len(nums2)-1) + self.findKth(nums1,nums2,(len(nums1)+len(nums2))/2 - 1,0,len(nums1)-1,0,len(nums2)-1) ) / 2.0
else:
return self.findKth(nums1,nums2,(len(nums1)+len(nums2))/2,0,len(nums1)-1,0,len(nums2)-1)
LeetCode#4 Median of Two Sorted Arrays (2)
最新推荐文章于 2022-03-21 22:18:51 发布