leetcode4:寻找两个有序数组的中位数 python实现

题目

给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。
请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。
你可以假设 nums1 和 nums2 不会同时为空。

示例 1

nums1 = [1, 3]
nums2 = [2]
则中位数是 2.0

示例 2

nums1 = [1, 2]
nums2 = [3, 4]
则中位数是 (2 + 3)/2 = 2.5

代码

class Solution(object):
    def findMedianSortedArrays(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: float
        """
        minValue = -1
        maxValue = 999999999999999999999999
        len1 = len(nums1)
        len2 = len(nums2)
        size = len1 + len2
        if len1 > len2:
            len1, len2, nums1, nums2 = len2, len1, nums2, nums1
        cutL = 0
        cutR = len1
        cut1 = len1 // 2
        cut2 = size // 2 - cut1
        while cut1 <= len1:
            L1 = minValue if cut1 == 0 else nums1[cut1 - 1]
            R1 = maxValue if cut1 == len1 else nums1[cut1]
            L2 = minValue if cut2 == 0 else nums2[cut2 - 1]
            R2 = maxValue if cut2 == len2 else nums2[cut2]
            if L1 > R2:
                cutR = cut1 - 1
            elif L2 > R1:
                cutL = cut1 + 1
            else:
                if size % 2 == 0:
                    l = max(L1, L2)
                    r = min(R1, R2)
                    return (l + r) / 2
                else:
                    return min(R1, R2)
            cut1 = (cutR - cutL) // 2 + cutL
            cut2 = size // 2 - cut1

解法参考:此博客
然鹅,对于示例2的数据,本地运行正确2.5,但是leetcode上结果一直是2,不明白为什么。。。。。
在这里插入图片描述
问题已解决。(2+3)/2.0或者 (float)(2+3)/2即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值