首先,该文章来自于极客时间网站,王争的专栏——《数据结构与算法之美》,我这里只是做简单的解释、记录并添加自己的见解,只是作为个人笔记,若侵权,马上删除。最后建议直接去该网站上购买该课程看原作者的讲解,一来是支持作者,二来是作者写的确实不错。
首先,我们来看一道思考题:假设我们有 1000 万个整数数据,每个数据占 8 个字节,如何设计数据结构和算法,快速判断某个整数是否出现在这 1000 万数据中? 我们希望这个功能不要占用太多的内存空间,最多不要超过 100MB,你会怎么做呢?
无处不在的二分思想
先看一个例子,假设现在有10个订单,订单金额分别是8,11,19,23,27,33,45,55,67,98。我们的任务是寻找是否存在金额等于19元的订单。如果存在,则返回订单数据,如果不存在则返回null。
利用二分思想,每次都与区间的中间数据(如果范围的数字有偶数个,中间数有两个,则选择较小的那个)比对大小,缩小查找区间的范围。如下图所示,low 和 high 表示待查找区间的下标,mid 表示待查找区间的中间元素下标。