import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型一维数组
     * @return bool布尔型
     */
    public boolean can_jump (int[] nums) {
        // write code here
        int n = nums.length;
        int maxReach = 0; // 最远可到达的位置

        for (int i = 0; i < n; i++) {
            if (i > maxReach) {
                // 如果当前位置超过了最远可到达的位置,说明无法继续跳跃,返回 false
                return false;
            }
            maxReach = Math.max(maxReach, i + nums[i]); // 更新最远可到达的位置
            if (maxReach >= n - 1) {
                // 如果最远可到达的位置超过或等于数组的最后一个位置,说明可以成功到达最后一个障碍,返回 true
                return true;
            }
        }

        return true; // 默认情况下返回 true,因为题目描述首先站在第一个障碍位置
    }
}

编程语言是Java。

这道题考察的主要知识点包括:

  1. 数组的遍历与操作:遍历障碍数组,更新最远可到达的位置。
  2. 贪心算法:通过贪心的策略,每次选择能够跳跃的最远距离,判断是否能够成功跳跃到最后一个障碍。

以下是代码的解释:

  • can_jump 方法接受一个非负整数数组 nums 作为参数,表示在每个障碍处可以跳跃的最大长度。
  • 初始化变量 maxReach 表示当前最远可到达的位置。
  • 使用一个循环遍历每个障碍的位置。
  • 在循环内,首先判断当前位置是否超过了最远可到达的位置。如果超过了,说明无法继续跳跃,直接返回 false。
  • 更新最远可到达的位置,取当前位置与当前位置加上最大跳跃长度的较大值。
  • 判断最远可到达的位置是否超过或等于数组的最后一个位置。如果是,说明可以成功到达最后一个障碍,直接返回 true。
  • 循环结束后,如果没有提前返回,说明可以从第一个障碍开始跳跃,并成功到达最后一个障碍,返回 true。