#45
Medium
贪心

Jump Game II

求到达最后一个位置的最少跳跃次数。

ArrayGreedy

题目定位

贪心做法的核心是把一次跳跃看作一层 BFS,并在当前层内维护最远可达边界。

关键观察

只有当前层扫描结束时才增加跳跃次数,而不是每次发现更远位置都加一次。

目标复杂度

O(n) / O(1)

这题的解法思路怎么拆

1

贪心做法的核心是把一次跳跃看作一层 BFS,并在当前层内维护最远可达边界。

2

只有当前层扫描结束时才增加跳跃次数,而不是每次发现更远位置都加一次。

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

在同一层中途就提前增加跳数。

warning

下一层最远边界没有正确维护。

高频追问

为什么这个贪心和 BFS 分层是等价的?

如果末尾不可达,应该怎样判断?

继续刷相关题

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

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