题目定位
贪心做法的核心是把一次跳跃看作一层 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 分层是等价的?
如果末尾不可达,应该怎样判断?
继续刷相关题
先把 贪心 这个模式刷成体系,再去做更难变体。