外观
一句话答案
二分不只精确查找,还能找第一个/最后一个满足条件的位置、旋转数组搜索、峰值查找等。
核心要点
常见变体:
| 变体 | 关键调整 |
|---|---|
| 第一个 ≥ target | 找到时 hi=mid-1 继续 |
| 最后一个 ≤ target | 找到时 lo=mid+1 继续 |
| 旋转数组搜索 | 判断哪半有序再选方向 |
高频题: LC33 旋转数组搜索 / LC34 查找首尾位置 / LC162 峰值
追问与易错
追问方向:
- 二分查找的边界条件怎么处理?
- 旋转数组有重复元素怎么办?
- 浮点数二分怎么做?
易错点:
- ❌ 二分只能用于有序数组——旋转/峰值等场景也可以
- ❌ while 条件用 < 还是 <= 搞不清——取决于搜索区间定义
💡 记忆锚点
二分的核心不是"找到"而是"缩小范围":每次排除一半。找精确值是基础款;找第一个>=target,找到了别急着走,记下来继续往左找更小的(hi=mid-1);旋转数组先判断哪半边有序再决定往哪边缩。关键:while条件和边界更新必须配套,lo<=hi对应闭区间,lo<hi对应左闭右开。