查找连续元素相差1的数组中的元素

时间:2011-09-04 17:37:49

标签: algorithm

有一个数组,任何两个后续元素之间的距离是一(+ 1 / -1)。你如何在其中找到一个元素。可以在少于O(n)的时间内完成

2 个答案:

答案 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)

这是一个简单的想法,可以帮助你思考问题。

如果您正在寻找xabs(x-array[0]) == k,那么您也可以跳转到array[k]

想想这个,你就会得到你的算法。

现在,考虑一下这种算法最糟糕的情况。你可以做到这一点,以便大多数条目必须检查? (提示:是)