algorithm - 使用 mid=first+(last-first)/2 而不是 (first+last)/2 的效果

标签 algorithm binary-search

为什么人们使用 mid=first+(last-first)/2 而不是 (first+last)/2,在二进制搜索的情况下) 两者有区别吗。如果有,请告诉我,因为我无法理解其中的区别。

最佳答案

如果使用 mid = (first + last)/2 那么当 first 或 last 为 MAX 时,即有可能发生溢出,即当 first 或 last 是maximum or range,再加一个数就会溢出。

所以我们使用 mid = first + (last-first)/2,因为即使 first 或 last 是范围的最大值,这也不会溢出。

此外,由于在竞争性编程测试用例中会测试您的代码以适应极端情况,因此很可能其中一个测试用例具有这些最大范围数。所以建议使用 mid = first + (last-first)/2

关于algorithm - 使用 mid=first+(last-first)/2 而不是 (first+last)/2 的效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62506749/

相关文章:

c - 尝试二分查找

c++ - 给定一个二叉搜索树和一个数字,找到一条路径,其节点的数据相加为给定的数字。

python - 使用 python 在大型 .txt 中进行二进制搜索(按哈希排序)

algorithm - 数组的所有子集之间的最大异或

将 unix 时间转换为日期

java - 使用二进制搜索从 TreeSet 返回一个元素

c++二进制搜索返回(找到)无论用户类型如何

c++ - 堆损坏和程序崩溃

java - 在 Java 中打开 Quadratic Sieve Jar 文件

algorithm - Prolog 练习 2-3-4 树