关于二分查找算法找中间值,使用(start+end)/2与start+(end-start)/2两种方法区别?

问题背景

在做二分查找相关算法题的时候,发现很多人喜欢使用start+(end-start)/2来查找中间值,而不是常见的(start+end)/2,查阅资料,发现start+(end-start)/2可以有效避免int越界问题,但是不知道为什么,希望有大佬可以说一下原理

阅读 2.7k
2 个回答

前提:start和end都在int范围内,并且作为下标,肯定start和end都大于等于0。

  1. (end-start)/2的差值肯定在int范围内,即使end是int的最大值,start是0(作为下标,最小只能是0),但除以2后向下取整,肯定也在int范围内;
  2. start再加上 end和start 之间差值的一半,连end超不过,肯定也超不过int的范围。

因此 start+(end-start)/2 可以避免int越界的问题。

(start+end)/2就不一定了,假如start和end都已经高过了int的中间值,两个数的和肯定就首先int越界了,再除以2已经晚了。

用 start + (end - start) / 2 ,不会直接计算 start 和 end 的和,就算 start 和 end 都很大,(end - start) 的值依然在整数范围内

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题