二分算法中值mid构造方法:如何避免无限死循环
mid = (left + right) / 2
最常用的写法。
mid = left + (right - left ) / 2
是第一种的增强写法,可以防止溢出,其他地方与第一种无异。
mid = (left+right)/2 + 1
此写法使得在 /2 有余数时进行了五入的操作。
用于在寻找右边界,即mid被归于右侧(left=mid)时,防止死循环。
而为什么此时会产生死循环呢?
假设现在在寻找右边界,同时:left=x,right=x+1
则此时:mid=x
如果在mid时二分条件成立,则再进行二分寻找右边界的时候,此mid值会作为二分的下界保留,即下次查找的范围为包括mid的mid及其右半部分,[ mid , right ]
而同时现在的下界mid等于之前的上界left,
则可以得知如此循环下去,会是一个死循环。
参考: