对于二分搜索,有几种变化,应根据自己的需求灵活使用,
public int bisec(int []num,int target){
int left=0,right=num.length-1;
while(left<right){
int mid=(left+right)/2+1;
if(num[mid]>target)
right=mid-1;
else
left=mid;
}
return left;
}
如上,
主要目标是找到位置index, 使得num[index+1]>target, 而num[index]<=target,那么需要修改mid的式子,使mid向右偏,优先判断右侧,来缩小范围
如果将mid定义成 mid=(left+right)/2的话, 就会进入死循环,例如num=[1,3],target =1 ,由于优先左侧,mid=0,left和right不会改变,所以会进入死循环,因而需要将mid定义为(left+right)/2+1;