#55
Medium
贪心

Jump Game

判断是否能到达最后一个位置。

ArrayGreedy

题目定位

只要维护一个当前最远可达边界就足够,因此这题是贪心不变式的典型例子,而非必须 DP。

关键观察

只要当前位置没有超过当前最远可达边界,就还能用 nums[i] 去继续延伸边界。

目标复杂度

O(n) / O(1)

这题的解法思路怎么拆

1

只要维护一个当前最远可达边界就足够,因此这题是贪心不变式的典型例子,而非必须 DP。

2

只要当前位置没有超过当前最远可达边界,就还能用 nums[i] 去继续延伸边界。

3

先找出那个最能保留未来选择空间的局部决策。

4

如果排序能让这个选择被验证,就先排序。

参考实现

Python
# Generic pattern template
items.sort(key=priority)
answer = 0
for item in items:
    if can_take(item):
        take(item)
        answer = update(answer)

常见坑点

warning

看到 0 就慌,但没判断它是否已被更远边界跨过去。

warning

把“是否可达”和“最少几步可达”混成一题。

高频追问

为什么只维护最远可达边界就够了?

它和 Jump Game II 的联系是什么?

继续刷相关题

先把 贪心 这个模式刷成体系,再去做更难变体。

view_week回到模式页
LeetCode 55. Jump Game 题解思路 | Interview AiBox