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