注意1:因为你说整数在增加,所以你已经排除了数组中存在重复项(否则你会说单调增加)。因此,可以快速检查第一个元素是否大于 1,以排除是否无解。换句话说,为了有任何解的机会,第一个元素必须 <= 1。
注2:与注1类似,如果最后一个元素<数组长度,则无解。
一般来说,我认为你能做的最好的事情就是二分搜索。您将其捕获在低指数和高指数之间,然后检查低指数和高指数之间的中间指数。如果 array[middle] 等于 middle,则返回 yes。如果小于middle,则将left设置为middle+1。否则,将 right 设置为 middle - 1。如果 left 变为 > right,则返回 no。
运行时间为 O( log n )。
编辑:如果允许单调递增,算法将不起作用。练习:解释原因。:-)
| 归档时间: |
|
| 查看次数: |
167 次 |
| 最近记录: |