Leetcode 4. Median of Two Sorted Arrays(python)
求两个有序列表nums1和num2中的第k个数(finK函数),用分治法
比如对于求中位数:
nums1=[11,23,35,56,78]
nums2=[8,15,19,21,30,41,70]
nums1的中位数35>nums2的中位数21,则两个列表的中位数一定在[11,23,35]和[21,30,41,70]这两个列表中
class Solution(object):
def findK(self,nums1,nums2,k):
l1,l2=len(nums1),len(nums2)
pa=min(k/2,len(nums1))
pb=k-pa
if l1>l2:
return self.findK(nums2,nums1,k)
if l1==0:
return nums2[k-1];
if k==1:
return min(nums1[0],nums2[0])
if nums1[pa-1]<nums2[pb-1]:
return self.findK(nums1[pa:],nums2,k-pa);
elif nums1[pa-1]>nums2[pb-1]:
return self.findK(nums1,nums2[pb:],k-pb);
else:
return nums1[pa-1];
def findMedianSortedArrays(self, nums1, nums2):
n=len(nums1)+len(nums2)
if 1&n:
return self.findK(nums1,nums2,(n+1)/2)
else:
return (self.findK(nums1,nums2,n/2)+self.findK(nums1,nums2,n/2+1))/2.0

浙公网安备 33010602011771号