今天在刷leetcode中用到了二分查找,答案中给的是
int mid = (right - left)/2 + left;
我自己写的是
int mid = (left + right) / 2;
测试结果是,我的没通过,超时了,第一种则通过了,后来上网查了一下:
如果用mid=(left+right)/2,在运行二分查找程序时可能溢出超时。
因为如果left和right相加超过int表示的最大范围时就会溢出变为负数。
所以如果想避免溢出,不能使用mid=(left+right)/2,应该使用mid=left+(right-left)/2
不知道有没有关系,总之以后用到二分查找的话则使用第一种方式了