两个整数的中间值

时间:2015-12-25 20:25:51

标签: java integer binary-search

之间有什么区别
int x = (right + left) / 2;

int x = left + (right - left) / 2;

我在第一种情况下得到了时间限制异常,在进行二元搜索时被第二种情况接受了

2 个答案:

答案 0 :(得分:4)

int变量的总和

  

右+左(超出整数限制)

太大并超出整数存储限制  这就是为什么由于总和而存在过流,但是当你使用差异版本时第二个

  

左+(右 - 左)(在整数限制内)

它适合计算并且有利于机器。

答案 1 :(得分:2)

int limit(bound)是2,147,483,647。

您的right+left值超出int的范围 但是left + (right - left) / 2值小于int,所以这就是第二个表达式工作正常的原因。

如果您添加了这么大的数字,请使用long