1. 题目描述
建议,,,看懂即可
2. 题目分析
- 如果某一个作为起跳点的格子可以跳跃的距离是 3,那么表示后面 3 个格子都可以作为 起跳点。
- 可以对每一个能作为 起跳点 的格子都尝试跳一次,把 能跳到最远的距离 不断更新。
- 如果从这个 起跳点 起跳叫做第 1 次 跳跃,那么从后面 3 个格子起跳 都 可以叫做第2次 跳跃。
- 所以,当一次 跳跃 结束时,从下一个格子开始,到现在 能跳到最远的距离,都 是下一次 跳跃 的 起跳点。
- 对每一次 跳跃 用 for 循环来模拟。
- 跳完一次之后,更新下一次 起跳点 的范围。
- 在新的范围内跳,更新 能跳到最远的距离。
- 记录 跳跃 次数,如果跳到了终点,就得到了结果。
3. 题目代码
public int jump(int[] nums) {
int ans = 0;
int start = 0;
int end = 1;
while (end < nums.length) {
int maxPos = 0;
for (int i = start; i < end; i++) {
// 能跳到最远的距离
maxPos = Math.max(maxPos, i + nums[i]);
}
start = end; // 下一次起跳点范围开始的格子
end = maxPos + 1; // 下一次起跳点范围结束的格子
ans++; // 跳跃次数
}
return ans;
}