#4
Hard
二分搜索

Median of Two Sorted Arrays

在对数时间内求两个有序数组的中位数。

ArrayBinary Search

题目定位

难点不在中位数本身,而在于找到一个分割点:左边元素数量正确,且左半部分所有值都不大于右半部分。

关键观察

对较短数组的分割点做二分,因为较长数组的分割点会随之被唯一确定。

目标复杂度

O(log(min(m,n))) / O(1)

这题的解法思路怎么拆

1

难点不在中位数本身,而在于找到一个分割点:左边元素数量正确,且左半部分所有值都不大于右半部分。

2

对较短数组的分割点做二分,因为较长数组的分割点会随之被唯一确定。

3

先用自然语言写出单调判定条件。

4

确保搜索区间一定覆盖答案。

参考实现

Python
# Generic pattern template
# Find first position where check(mid) is true
left, right = 0, n
while left < right:
    mid = left + (right - left) // 2
    if check(mid):
        right = mid
    else:
        left = mid + 1
return left

常见坑点

warning

在较长数组上二分,边界会更难写。

warning

分割后某一侧为空时没有用哨兵值处理。

高频追问

你能不用代码,只用 partition 语言把思路讲清楚吗?

为什么一定优先在较短数组上二分?

继续刷相关题

先把 二分搜索 这个模式刷成体系,再去做更难变体。

view_week回到模式页
LeetCode 4. Median of Two Sorted Arrays 题解思路 | Interview AiBox