问题背景
在做二分查找相关算法题的时候,发现很多人喜欢使用start+(end-start)/2
来查找中间值,而不是常见的(start+end)/2
,查阅资料,发现start+(end-start)/2
可以有效避免int越界问题,但是不知道为什么,希望有大佬可以说一下原理
在做二分查找相关算法题的时候,发现很多人喜欢使用start+(end-start)/2
来查找中间值,而不是常见的(start+end)/2
,查阅资料,发现start+(end-start)/2
可以有效避免int越界问题,但是不知道为什么,希望有大佬可以说一下原理
用 start + (end - start) / 2 ,不会直接计算 start 和 end 的和,就算 start 和 end 都很大,(end - start) 的值依然在整数范围内
1 回答3.4k 阅读✓ 已解决
1 回答2.8k 阅读
2.5k 阅读
1 回答554 阅读✓ 已解决
1 回答1.2k 阅读
1 回答525 阅读✓ 已解决
前提:start和end都在int范围内,并且作为下标,肯定start和end都大于等于0。
因此
start+(end-start)/2
可以避免int越界的问题。但
(start+end)/2
就不一定了,假如start和end都已经高过了int的中间值,两个数的和肯定就首先int越界了,再除以2已经晚了。