二分法
可乐老师课堂
编辑于 2024年03月29日 20:15
收录于文集
共15篇

二分查找(Binary Search)是一种在有序数组中查找特定元素的算法。它的基本思想是每次将待查找区间缩小一半,通过比较中间元素和目标元素的大小关系来确定下一步查找的方向。这样可以快速地定位目标元素的位置。

例如:数字炸弹,在1-100里面选出一个随机数,我们可以每次选中间的数字,例如选50,如果不对,那么就是或者大了,或者小了,我们都能缩小一半的范围。第二次也是同理,选1-50或者50-100中间的数字,就又能去掉一半的数字。如此类推,就算每次都猜不对,猜到第7次的时候只剩下一个数字了,所以第7次一定能才对。(2^7 =128>100)

二分法的通用框架

二分法基本框架

②查找最高点:输入一串单峰数字,例如1,5,6,8,4,3,2。数字先逐渐增加,然后逐渐减少,只有一个峰值(最高点也可能在第一个或者最后一个)。

解题思路:根据峰值规律:如果该点是峰值,那么左边和右边都应该小于该点。同理,如果找到的点大于左边的点,小于右边的点,那么就是上升状态,峰值应该在该点的右边。如果找到的点是小于左边的点,大于右边的点,那么就算处于下降的状态,峰值应该在该点的左边。

峰值

③枚举用二分优化查找结果。(洛谷P2440 木材加工

木材厂有 n 根原木,现在想把这些木头切割成 k 段长度均为 l 的小段木头(木头有可能有剩余)。当然,我们希望得到的小段木头越长越好,请求出 l 的最大值。木头长度的单位是cm,原木的长度都是正整数,我们要求切割得到的小段木头的长度也是正整数。

例如有两根原木长度分别为 11 和 21,要求切割成等长的 6 段,很明显能切割出来的小段木头长度最长为 5

解题思路:枚举可行,但数据量太大时,容易超时,可用二分优化。找数据可能会有多个符合条件的,所以要重复缩小范围,直到剩下两个数字。

二分答案