LeetCode 45 - 跳跃游戏 II
2026/1/7大约 2 分钟
题目
给定一个长度为 n 的 0 索引整数数组 nums。初始位置在下标 0。
每个元素 nums[i] 表示从索引 i 向后跳转的最大长度。换句话说,如果你在索引 i 处,你可以跳转到任意 (i + j) 处:
0 <= j <= nums[i] 且
i + j < n
返回到达 n - 1 的最小跳跃次数。测试用例保证可以到达 n - 1。
示例 1:
输入: nums = [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。
从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。
示例 2:
输入: nums = [2,3,0,1,4]
输出: 2
题解
class Solution {
public int jump(int[] nums) {
//核心思路:贪心
//在当前这一步的范围内,我们要找下一跳能去的最远位置
//走到当前这一步范围边界,更新边界
if (nums.length == 1) return 0; // 起点就是终点
int end = 0; // 当前这一步能到达的右边界
int maxPosition = 0; // 下一步能到达的最远位置
int steps = 0; // 记录跳跃次数
// 注意:这里只遍历到 n-2。
// 因为如果 i 到了 n-1,我们已经到了终点,不需要再跳了。
for (int i = 0; i < nums.length - 1; i++) {
// 1. 贪心更新:在当前这一步的范围内,我们要找下一跳能去的最远位置
maxPosition = Math.max(maxPosition, i + nums[i]);
// 2. 遇到边界:如果不跳这一步,就再也走不动了
if (i == end) {
end = maxPosition; // 更新边界,把刚才找到的最远位置作为新的边界
steps++; // 步数 +1
}
}
return steps;
}
}
