跳跃游戏Ⅱ
45. 跳跃游戏 II - 力扣(LeetCode)
给定一个长度为 n
的 0 索引整数数组 nums
。初始位置为 nums[0]
。
每个元素 nums[i]
表示从索引 i
向前跳转的最大长度。换句话说,如果你在 nums[i]
处,你可以跳转到任意 nums[i + j]
处:
0 <= j <= nums[i]
i + j < n
返回到达 nums[n - 1]
的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]
。
示例 1:
1 |
|
示例 2:
1 |
|
提示:
1 <= nums.length <= 104
0 <= nums[i] <= 1000
- 题目保证可以到达
nums[n-1]
贪心解法
如果移动下标达到了当前这一步的最大覆盖最远距离了,还没有到终点的话,那么就必须再走一步来增加覆盖范围,直到覆盖范围覆盖了终点。
用nextCover表示当前范围内中的下一步可覆盖的最大范围
nowCover表示当前课覆盖的最大范围,如果遇到了nowCover的边界,说明需要跳一步来拓展变为nextCover,步数+1,即为最少的步数所能达到的最大范围,不需要管从nowCover中哪一个下标跳跃变为nextCover,因为从nowCover变为nextCover最少只需要1步,
如果跳跃了之后能够覆盖到终点,返回答案

1 |
|
- 时间复杂度: $O(n)$
- 空间复杂度: $O(1)$
跳跃游戏Ⅱ
http://example.com/2023/02/26/算法/贪心/6. 跳跃游戏 II/