给定一个数组,每个元素比前一个元素多一个或少一个。找到一个元素。(优于O(n)方法)
我有一个解决方案,但我无法正式说出它是否是正确的解决方案:
让我们假设我们必须找到n。
d
个元素并且跳转d
元素d
= 0 答案 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)。