之间有什么区别
int x = (right + left) / 2;
和
int x = left + (right - left) / 2;
我在第一种情况下得到了时间限制异常,在进行二元搜索时被第二种情况接受了
答案 0 :(得分:4)
int变量的总和
右+左(超出整数限制)
太大并超出整数存储限制 这就是为什么由于总和而存在过流,但是当你使用差异版本时第二个
左+(右 - 左)(在整数限制内)
它适合计算并且有利于机器。
答案 1 :(得分:2)
int limit(bound)是2,147,483,647。
您的right+left
值超出int
的范围
但是left + (right - left) / 2
值小于int
,所以这就是第二个表达式工作正常的原因。
如果您添加了这么大的数字,请使用long
。