🎯 二分查找
在有序或部分有序结构中以 O(log n) 定位目标,边界处理是关键(左闭右闭 vs 左闭右开)。
6 题 · 简单 ×1 中等 ×4 困难 ×1
| # | 题目 | 难度 |
|---|---|---|
| 35 | 搜索插入位置 | 简单 |
| 74 | 搜索二维矩阵 | 中等 |
| 34 | 在排序数组中查找元素的第一个和最后一个位置 | 中等 |
| 33 | 搜索旋转排序数组 | 中等 |
| 153 | 寻找旋转排序数组中的最小值 | 中等 |
| 4 | 寻找两个正序数组的中位数 | 困难 |
核心思路
- 搜索插入位置:标准 lower_bound,返回第一个
≥ target的位置。 - 搜索二维矩阵:将矩阵展开为一维(
mid / n行,mid % n列)做标准二分。 - 查找第一个和最后一个位置:两次二分分别求左边界和右边界。
- 搜索旋转排序数组:每次判断左半段或右半段是否有序,再确定 target 在哪侧收缩。
- 旋转数组最小值:与右端点比较:
nums[mid] > nums[right]则最小值在右半,否则在左半(含 mid)。 - 两个正序数组的中位数:在较短数组上二分划分点,保证两侧元素各占一半,O(log(min(m,n)))。