二分查找应该都会,那么二分查找的变体呢?
0. 前言 大家好,我是多选参数的程序锅,一个正在”捣鼓“操作系统、学数据结构和算法以及 Java 的硬核菜鸡。 二分查找大家估计都会,但是二分查找的变体大家会吗?我相信大佬都是会的,但是我这个菜鸡就是不会了。还记得,在学习二分查找变体的时候,我像发现了新大陆一般,很开森,很开森,很开森。 为了整个知识的相对完整,下面还是从最基本的二分查找开始讲解,之后讲解二分查找的变体,这个变体在刷 Leetcode 的有些题目的时候也会用到。最后对二分查找这种算法进行总结。另外,这个数据结构和算法系列的代码都在 github 仓库中可以找到:https://github.com/DawnGuoDev/algos 。 1. 二分查找及其变体 二分查找针对的是一个有序的数据集合(必须是有序),查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半(或者说剔除了另一半数据),直到找到要查找的元素,或者区间被缩小为 0。 由于经过一次查找,会剔除一半数据而剩下另一半数据,因此经过 k 次查找之后,剩下的数据个数为 ,整个二分查找当剩下一个元素的时候停止,因此需要经过 次查...







