假DP 从前往后遍历每一个点,更新目前能跳到的最远的点

import java.util.*;

public class Solution {
    public boolean canJump (int[] nums) {
      int reach = 0; // 目前最远能跳到的点
      for (int i = 0; i < nums.length; i++) {
        // 之前的点都跳不到当前的点,所以失败
        if (reach < i) return false;
        // 已经能跳到最后一个点了,直接返回
        if (reach >= nums.length-1) return true;
        // 如果通过当前的点能够到更远的点,更新reach
        reach = Math.max(reach, i + nums[i]);
      }
      
      return true;
    }
}