python leetcode 4. Median of Two Sorted Arrays

221 篇文章 2 订阅

并不仅限于找到中位数

** 这里的重点是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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值