在数组中查找元素,其中每个元素比其前一个元素多一个或一个

时间:2013-11-11 08:29:58

标签: arrays algorithm data-structures

给定一个数组,每个元素比前一个元素多一个或少一个。找到一个元素。(优于O(n)方法)

我有一个解决方案,但我无法正式说出它是否是正确的解决方案:

让我们假设我们必须找到n。

  • 从给定的索引中,找到到n的距离; d = | a [0] - n |
  • 所需元素至少是d个元素并且跳转d元素
  • 重复上述内容直到d = 0

2 个答案:

答案 0 :(得分:8)

是的,你的方法会奏效。

如果您只能在每个后续索引处增加/减少一个,则距离d更近的索引的值不能与当前值的距离d。所以你无法跳过目标值。并且,除非找到该值,否则距离将始终大于0,因此您将继续向右移动。因此,如果该值存在,您将找到它。

不,在最坏的情况下,你不能比O(n)做得更好。

考虑一个数组1,2,1,2,1,2,1,2,1,2,1,2,您正在寻找0。任何2都可以更改为0而无需更改任何其他值,因此我们必须查看所有2并且n/2 1}} = O(n) 2的。

答案 1 :(得分:0)

预处理可以在这里提供帮助。 在O(n)时间复杂度中查找数组的最小和最大元素。 如果要查询的元素介于数组的最小值和最大值之间,则该元素存在于数组中,否则该元素不存在于该数组中。因此,任何查询都将花费O(1)时间。如果多次查询该数组,则摊销的时间复杂度将小于O(n)。