【发布时间】:2015-12-16 06:30:21
【问题描述】:
我在一次采访中被问到这个问题。
你站在 0 点,你必须到达位置 X。你可以跳到 D(1 到 D)。如果 X > D,很明显你在初始跳跃时无法到达 X 位置。
现在每秒钟都有从 1 到 N 的随机位置出现的图块。这是作为零索引数组 A[k] 给出的,其中 A[k] 表示图块在第 k 秒出现的位置。你必须找出,在哪一秒你有可能到达(或穿越)目的地 X。
如果在初始或 A[0] 之后有可能,则返回 0,或返回最小秒数。如果即使在所有瓷砖之后也不可能,则返回 -1。
约束: 1
1
1
1
例如。
X = 7,D=3
A = {1,3,1,4,2,5}
那么答案是 3。因为在第 3 个第二个图块出现在位置 4 并且有可能达到 X=7。在那之前的任何一秒都不可能。
我知道这是一个措辞过多的问题,但如果我不能很好地沟通,我绝对可以解决任何问题。
问题是预期时间复杂度为 O(N),您可以使用额外的空间 O(X)。
我找到了一个 O(n * log n * log n) 的解决方案。即对第二个进行二分搜索并获得第一个 [1..mid] 元素,按位置对它们进行排序并验证解决方案。它似乎通过了测试用例,但它不是线性的。
我很努力,但找不到任何 O(N) 解决方案。你能帮我么?
【问题讨论】:
-
这不就是一个累计吗?
-
@GordonLinoff 你能提供更多细节吗?我很努力,但找不到直接的解决方案。我可能错过了一个基本点。我不确定当瓷砖出现在不同的秒数时如何使用累积和?
-
每次跳跃也需要时间吗?
-
return the minimum second at which it becomes possible for you to reach (or cross) the destination X和尽快提供结果之间似乎有一条细线,这需要在线算法。 (我认为即使是后者也是可能的——试试amortised analysis。)
标签: algorithm language-agnostic