首页 > 技术文章 > 二分算法

xingci 2022-03-13 21:58 原文

知识点:

 

一:核心思想 

  两个指针,left,right.分别指向头0 和尾部n-1.在一个已经有序的数组当中,根据 mid = (left+right)/2 来不断缩小查找目标所在的下标,最终实现查找的时间复杂度是(log n)只查找一半的数组就能完成。


二:查找对象分类

  一个:直接简单查找就行

  多个:因为值相等并且排序好了,所以是连续在一起的,可以分别查找左右两边边界即可。如果查找左边界,就把查找的值默认为大于目标值,比如 {1, 2, 2 ,3}  查 2.

如果查到2就像查到3一样,让指针像左边缩小范围,最后left 和right 指针会合并指在1 这个值的小标,那么加一,就是2的左边界了,同理,有边界也是一样。


三:查找数组是中途乱序的

  根据爬山思想,画出上坡图,图会有山峰,上坡,下坡,山谷,几个情况。看要查找的是什么值,二分法的精髓是:舍弃,比如你要山峰,你在上坡,那么左边的区域都是废的,往下走只能找到山谷,但是往上走一定会有山峰(这里是局部山峰,并不代表就是最大值,具体要根据题目要求)。


四:查找的数组是二维的

 思想:想办法把二维的变成一维的,可以使用下标转换法,让每次二分的跨度更大,效率比数组的行和列的分开二分要快。

 

推荐阅读