二分枚举
二分查找
引入
1、假设对于一个有序数列,例如 $\{1, 2, 3, 5, 5, 5, 8, 9\}$ (实际可能会很长),我们要在里面查找某个元素的位置或其是否存在
2、如果普通地使用循环遍历,那么时间复杂度为 $O(n)$ 常数级;但如果使用二分查找,时间复杂度仅为 $O(\log_2 n)$ 对数级,效率大大提升
3、二分查找每次操作得到当前未比较序列的中间下标 $mid$,如果 $mid$ 对应的值满足(或不满足)条件,则对于有序数列而言,$mid$ 前面的一系列值都满足(或都不满足)条件,这样便一次查找了未比较序列的一半的元素,便可根据情况调整未比较序列的边界。重复以上操作,直到未比较序列都已经比较,整个序列便按照给定的条件分为了(满足条件/不满足条件)两个组别,根据实际情况返回下标即可