4. Median of Two Sorted Arrays

这里写图片描述
findKth(A,B,k)函数思路如下:
1. 保持A是短的那一个数组,B是长的
2. 平分k, 一半在A,一半在B (如果A的长度不足K/2,那就pa就指到最后一个)
3. 如果pa的值 < pb的值,那证明第K个数肯定不会出现在pa之前,递归,把A数组pa之前的砍掉,同理递归砍B数组。
4. 递归到 m == 0 (短的数组用完了) 就返回 B[k - 1], 或者k == 1(找第一个数)就返回min(A第一个数,B第一个数)。

class Solution(object):
    def findMedianSortedArrays(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: float
        """
        lenA = len(nums1)
        lenB = len(nums2)
        #如果m+n为奇数,中间值为第(m+n)/2 + 1个元素
        #如果m+n为偶数,中间值为第(m+n)/2和第(m+n)/2 + 1个元素的均值
        if (lenA + lenB) % 2 == 1:
            return self.getKth(nums1,nums2,(lenA + lenB)/2 + 1)
        else:
            return (self.getKth(nums1,nums2,(lenA + lenB)/2) + self.getKth(nums1,nums2,(lenA + lenB)/2 + 1)) * 0.5




    def getKth(self,A,B,k):  #前面的A是短的,后面的B是长的
        lenA = len(A); lenB = len(B)
        if lenA > lenB:
            return self.getKth(B,A,k)
        if lenA == 0:
            return B[k - 1]
        if k == 1:
            return min(A[0],B[0])

        pa = min(k/2,lenA); pb = k - pa

        if A[pa - 1] <= B[pb - 1]:
            return self.getKth(A[pa:], B, pb)
        else:
            return self.getKth(A, B[pb:], pa)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值