题目

给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个下标。

思路

模拟法,想象你是一个横版游戏里的小人,每个格子上有“步数点数”,如果拿了“步数点数”,则之前积攒的步数就会重置。

Math.max(maxPos, i + steps)的含义:
每走一个格子,你要思考此时这个格子上的步数点数值不值得拿,如果步数点数比你之前积攒的步数点数大,就拿,否则无视,继续走

  1. class Solution {
  2. public boolean canJump(int[] nums) {
  3. int maxPos = 0; // 能跳的最远的坐标
  4. for (int i = 0; i < nums.length - 1; i++) { // i是当前所在位置
  5. int steps = nums[i]; // 当前能跳的次数;
  6. maxPos = Math.max(maxPos, i + steps); // 目前能走到的最远位置
  7. if (maxPos <= i) { // 目前能走的最远位置到不了终点
  8. return false;
  9. }
  10. }
  11. return true;
  12. }
  13. }