我的问题针对这里提出的问题:面试谜题:跳跃游戏
最重要的答案是它在O(n)
时间内运行。它说它可以做这个
因为每个元素只需要考虑一次(可以跳过第二次考虑的元素)
然而,仅仅检查我们是否已经考虑了一个元素,每个元素就需要一个恒定的时间,所以它应该需要O(n^2)
,对吧?O(n)
考虑每个新元素,O(n)
排除我们已经考虑过的元素。为什么不是这样?
您不需要检查是否已经考虑了某个特定元素,只需要跟踪已经检查的索引,以及到该点为止数组的最高v(除了刚才跳到的那个)。
然后您可以从那里继续检查,将每个新元素与之前的最大进行比较