1. 题目描述

建议,,,看懂即可

【字节跳动】跳跃游戏_字节跳动

2. 题目分析

  1. 如果某一个作为起跳点的格子可以跳跃的距离是 3,那么表示后面 3 个格子都可以作为 起跳点。
  2. 可以对每一个能作为 起跳点 的格子都尝试跳一次,把 能跳到最远的距离 不断更新。
  3. 如果从这个 起跳点 起跳叫做第 1 次 跳跃,那么从后面 3 个格子起跳可以叫做第2次 跳跃。
  4. 所以,当一次 跳跃 结束时,从下一个格子开始,到现在 能跳到最远的距离,都 是下一次 跳跃 的 起跳点。
  5. 对每一次 跳跃 用 for 循环来模拟。
  6. 跳完一次之后,更新下一次 起跳点 的范围。
  7. 在新的范围内跳,更新 能跳到最远的距离。
  8. 记录 跳跃 次数,如果跳到了终点,就得到了结果。

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;
	}