有一个数组,任何两个后续元素之间的距离是一(+ 1 / -1)。你如何在其中找到一个元素。可以在少于O(n)的时间内完成
答案 0 :(得分:4)
简单地从第一个位置开始;现在考虑搜索到的数字m ;
之后的差异array[0] == m
然后我们完成了;否则我们必须跳abs(array[0] - m)
个职位;现在重复此操作直到数组结束。
但是,在最坏的情况下我们不能比O(n)做得更好,只要考虑这种情况,我们想找到11:
10 9 8 9 8 9 10 9 8 9 8 9 10 9 8 9 8 9 10 9 8 9 8 9
答案 1 :(得分:2)
这是一个简单的想法,可以帮助你思考问题。
如果您正在寻找x
和abs(x-array[0]) == k
,那么您也可以跳转到array[k]
。
想想这个,你就会得到你的算法。
现在,考虑一下这种算法最糟糕的情况。你可以做到这一点,以便大多数条目必须检查? (提示:是)