LeetCode热题100-寻找两个正序数组的中位数

给定两个大小分别为 mn 的正序(从小到大)数组 nums1nums2。请你找出并返回这两个正序数组的 中位数

算法的时间复杂度应该为 O(log (m+n))

示例 1:

复制代码
输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2

要求:时间复杂度 O(log(m+n)),所以不能合并数组排序,只能用「二分 + 分割法」。

python 复制代码
class Solution:
    def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
        if len(nums1) > len(nums2):
            nums1, nums2 = nums2, nums1
        m, n = len(nums1), len(nums2)
        total = m + n
        left, right = 0, m

        while left <= right:
            i = (left + right) // 2
            j = (total + 1) // 2 - i

            l1 = nums1[i -1] if i > 0 else float("-inf")
            r1 = nums1[i] if i < m else float("inf")
            l2 = nums2[j - 1] if j > 0 else float("-inf")
            r2 = nums2[j] if j < n else float("inf")

            if l1 <= r2 and l2 <= r1:
                if total % 2 == 1:
                    return max(l1, l2)
                else:
                    return (max(l1, l2) + min(r1, r2)) / 2
            elif l1 > r2:
                right = i -1
            else:
                left = i + 1
        return 0.0
相关推荐
ja哇2 小时前
大厂面试高频八股
java·面试·职场和发展
踩坑记录2 小时前
leetcode hot100 寻找两个正序数组的中位数 hard 二分查找 双指针
leetcode
旖-旎2 小时前
深搜练习(电话号码字母组合)(3)
c++·算法·力扣·深度优先遍历
谭欣辰2 小时前
C++快速幂完整实战讲解
算法·决策树·机器学习
Mr_pyx2 小时前
【LeetHOT100】随机链表的复制——Java多解法详解
算法·深度优先
AIFarmer3 小时前
【无标题】
开发语言·c++·算法
AGV算法笔记3 小时前
CVPR 2025 最新感知算法解读:GaussianLSS 如何用 Gaussian Splatting 重构 BEV 表示?
算法·重构·自动驾驶·3d视觉·感知算法·多视角视觉
勤劳的进取家4 小时前
数据链路层基础
网络·学习·算法
Advancer-4 小时前
第二次蓝桥杯总结(上)
java·算法·职场和发展·蓝桥杯