Datawhale-LeetCode集训打卡-寻找两个有序数组的中位数

Datawhale-LeetCode集训打卡-寻找两个有序数组的中位数

Datawhale-LeetCode集训打卡-第二天-寻找两个有序数组的中位数

class Solution:
    def findMedianSortedArrays(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: float
        """
        if len(nums1) > len(nums2): 
            nums1, nums2 = nums2, nums1
    
        m = len(nums1)
        n = len(nums2)
        
        low = 0
        high = m
        
        while low <= high:
            # basic selection of the partitioner
            partitionM = (low + high) // 2
            # partitioning of the second array
            partitionN = (m + n + 1) // 2 - partitionM
            
            # getting values. sometimes maxLeftM index can be 0
            if partitionM > 0:
                maxLeftM = nums1[partitionM - 1]
            else:
                maxLeftM = float('-inf')   
            
            if partitionM == m:
                minRightM = float('inf')
            else:
                minRightM = nums1[partitionM]
                
            if partitionN > 0:
                maxLeftN = nums2[partitionN - 1]
            else:
                maxLeftN = float('-inf')
            
            if partitionN == n:
                minRightN = float('inf')
            else:
                minRightN = nums2[partitionN]
            
            # let's check if partition was selected correctly
            if maxLeftM <= minRightN and minRightM >= maxLeftN:
                if (m + n) % 2 == 0:
                    return (max(maxLeftM, maxLeftN) + min(minRightM, minRightN)) / 2.0
                else:
                    return max(maxLeftM, maxLeftN)
            # if not, move partitioning region
            elif maxLeftM > minRightN:
                high = partitionM -1
            else:
                low = partitionM + 1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值