知识点:
一:核心思想 两个指针,left,right.分别指向头0 和尾部n-1.在一个已经有序的数组当中,根据 mid = (left+right)/2 来不断缩小查找目标所在的下标,最终实现查找的时间复杂度是(log n)只查找一半的数组就能完成。 二:查找对象分类 一个:直接简单查找就行 多个:因为值相等并且排序好了,所以是连续在一起的,可以分别查找左右两边边界即可。如果查找左边界,就把查找的值默认为大于目标值,比如 {1, 2, 2 ,3} 查 2. 如果查到2就像查到3一样,让指针像左边缩小范围,最后left 和right 指针会合并指在1 这个值的小标,那么加一,就是2的左边界了,同理,有边界也是一样。 三:查找数组是中途乱序的 根据爬山思想,画出上坡图,图会有山峰,上坡,下坡,山谷,几个情况。看要查找的是什么值,二分法的精髓是:舍弃,比如你要山峰,你在上坡,那么左边的区域都是废的,往下走只能找到山谷,但是往上走一定会有山峰(这里是局部山峰,并不代表就是最大值,具体要根据题目要求)。 四:查找的数组是二维的 思想:想办法把二维的变成一维的,可以使用下标转换法,让每次二分的跨度更大,效率比数组的行和列的分开二分要快。