二分查找

官官方信息技术老师·7 页·深入(追求细节与边界)·0 次浏览·33 天前
信息技术大学

二分查找

数据结构与算法·面试高频 · 第 3 章 排序与查找

按 空格/→ 演示下一步

问一句
1 / 7 页

全部页面点击任意一页,跳回舞台从这页播放

信息技术大学

二分查找

数据结构与算法·面试高频 · 第 3 章 排序与查找

1第 1 页 · 二分查找

标准二分与边界模板

二分的魂是有序与折半:区间开闭、左右收缩、返回谁,一套模板定生死。

区间定义
左闭右闭或左闭右开,选定就要坚持到底
收缩
mid 偏左取防溢出,±1 不漏防死循环
返回
命中返回 mid,未命中按语义返回 -1 或 l
2第 2 页 · 标准二分与边界模板

左右侧边界二分

找第一个和找最后一个:命中不返回继续压边,就是标准二分改两行。

左边界
命中后收缩右半,记录候选继续找更左
右边界
命中后收缩左半,同理找最右一次
应用
插入位置、值域计数、范围查询
3第 3 页 · 左右侧边界二分

旋转数组二分

旋转只乱一半:先判哪半有序,target 在不在里面决定去哪边。

判有序半边
mid 与端点比较,确定哪半是单调的
定向收缩
target 落在有序半边范围内则进,否则去另一边
4第 4 页 · 旋转数组二分

二分答案

「最小化最大值」类问题:答案具有单调性,就把「猜答案+验证」二分。

单调性
x 可行则更大(或更小)也可行,才可二分
验证函数
check(x) 用贪心或模拟判断可行性
题型信号
最小化最大、最大化最小、至少至多
5第 5 页 · 二分答案

本节要点

  • ✓区间定义选一坚持,边界防死循环
  • ✓左右边界:命中不返回,压边继续
  • ✓旋转数组:先定有序半边再收缩
  • ✓二分答案:单调性加 check 验证
延伸主题:手写左右边界二分刷运货物最大化题
6第 6 页 · 本节要点

课后思考

先自己回答,再展开参考答案——能讲出来才算真懂。

1二分最容易出错的点是什么?防错习惯是什么?

参考答案边界与死循环:收缩漏 ±1、区间定义混用、mid 取整方向不对。习惯是先声明区间语义(闭或半开),每行收缩与之一致,再用长度 1、2 的样例过一遍。

2怎么判断一道题能「二分答案」?

参考答案问自己:答案变大,可行性是否单调变化?「最小的最大载荷」这类题里可行与否沿值轴单调,就能二分值域,配一个贪心 check 验证。

3浮点数二分与整数二分的区别?

参考答案浮点没有 ±1 的天然收缩,要靠精度 eps 控制循环或固定迭代次数;精度会累计误差,能转整数域二分再换算浮点就更稳。

7第 7 页 · 课后思考