我来解释一下,为什么要写成mid=left+(right-left)/2,而不是mid=(left+right)/2。
因为会溢出!!此时的溢出指的是,mid可能会超出该数据类型的最大值
我们假定一个数据类型
uint8 //数据范围0~255
uint8 left,right,mid;
//假定
left = 200;
right = 250;
//则left+right =450 > 255,此时已经溢出了
//0001 1100 0010 因为只能存储8位,实际1100 0010=194
mid = (left+right)/2; //此时实际mid=194/2
mid = left+(right-left)/2; //200+(250-200)/2 = 225
//此方法绝对不会溢出,最好写成这样
作者:plainchn
链接:https://leetcode.cn/leetbook/read/binary-search/xe5fpe/?discussion=FevRY1