python leetcode 4. Median of Two Sorted Arrays

并不仅限于找到中位数

** 这里的重点是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)

猜你喜欢

转载自blog.csdn.net/Neekity/article/details/84799441