【发布时间】:2017-01-06 08:57:33
【问题描述】:
我遇到了多个使用二分搜索变体来获得最终答案的问题。这些问题包括求数的平方根的下限、检查数是否是完全平方、求旋转数组中的最小值、求数组中数的第一个索引等。
所有算法都包含适当修改的低、高和中变量。
我在网上阅读了这些算法的几种变体,这些算法中总是有很大的机会出现一个错误,导致它错过了极端情况。对于以下变体,是否有任何标准可以帮助我了解何时应该使用哪一个?
1.变量的初始化
选项1:低= 0,高= arr.length
选项 2:低 = 0,高 = arr.length - 1
选项1:low = 1,high = arr.length
2。循环条件
选项1:while(low
选项2:同时(低
3。中间变量计算
选项1:中=(低+高)/2;
选项2:中=低+(高-低)/2;
4.条件检查和更新到低和高
选项 1:低 = 中,高 = 中
选项 2:低 = 中 AND 高 = 中 - 1
选项 3:低 = 中 + 1 AND 高 = 中
选项 4:低 = 中 + 1 且高 = 中 - 1
编辑:假设是 3 状态输出。数组索引从 0 开始。
【问题讨论】:
-
这些选项的几种组合将导致正确的算法。它还取决于数组索引是从 0 开始还是从 1 开始。
标签: arrays algorithm binary-search