java - 中点公式溢出错误

标签 java algorithm binary-search

我正在学习算法/big o,我只是对此感到好奇。

使用

 mid = (low+high)/2;

为了获得中点,通常不鼓励使用二分查找算法,因为可能会出现溢出错误。为什么会出现溢出错误,怎么办

 mid = low + (high-low)/2;

防止这个错误?

谢谢。

最佳答案

在第一种情况下,如果 low 和 high 都足够大(比如两者都等于 2^30+1/或什至更大/)。在第二种情况下,你不计算 (low+high),你做了一个小技巧,然后遍历表达式 (high-low) 并且该表达式相对于 int 溢出要安全得多。

不过,如果你没有一个大小大于 2^30 的数组(无论如何这是一个相当大的数组),即使使用第一个表达式,我也看不出你怎么会遇到 int 溢出.所以在大多数情况下我只会使用第一个而不用担心。

关于java - 中点公式溢出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24317360/

相关文章:

algorithm - 描述分而治之,合并分而治之算法的各个部分

java - Google Speech-to-Text API - Android 应用程序崩溃

java - 从照片路径创建位图时权限被拒绝

java - 如何在 Java 中将方法作为参数传递?

algorithm - 您如何解决具有给定内存限制的给定场景?

c# - 如何在排序数组中定位一个点?

c++ - LeetCode TwoSum 解决方案不起作用

java - JPanel 中透明 JCheckBox 的错误?

Javascript 算法/函数为可见光谱中的颜色生成 RGB 值

algorithm - 如何在不将文件存储在内存中的情况下从文件中读取 N 个随机行?