在有序数组中找>=num最左的位置
不断地进行二分,不断进行对于ans的数值的更新(找到了数值也要继续)
代码
优化
在去中点的时候,可能会发生溢出的情况,所以可以优化为
m = (l-r)/2;这样就避免了溢出的情况
在有序数组中找<=num最右的位置
作法如同上面
二分算法不一定运用于有序数组上(寻找峰值问题)
题目:(leetcode162)
给你一个数组,数组的第一位以及最后一位都是极小的数字,且相邻的数组不相等,如果一个数字比它相邻的数字大,那么则定义为峰值
思路:
因为数组的第一位以及最后一位都是极小的数字,所以第一位数字与第二位数字呈现上升趋势,同理最后两位呈现下降趋势,说明中间一定存在峰值,利用二分取到中间值,判断一下是否为峰值,如果不是,那么判断一下,中间点两端与中间值的大小,获得一下趋势,