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。
这道题考察的主要知识点包括:
- 数组的遍历与操作:遍历障碍数组,更新最远可到达的位置。
- 贪心算法:通过贪心的策略,每次选择能够跳跃的最远距离,判断是否能够成功跳跃到最后一个障碍。
以下是代码的解释:
- can_jump 方法接受一个非负整数数组 nums 作为参数,表示在每个障碍处可以跳跃的最大长度。
- 初始化变量 maxReach 表示当前最远可到达的位置。
- 使用一个循环遍历每个障碍的位置。
- 在循环内,首先判断当前位置是否超过了最远可到达的位置。如果超过了,说明无法继续跳跃,直接返回 false。
- 更新最远可到达的位置,取当前位置与当前位置加上最大跳跃长度的较大值。
- 判断最远可到达的位置是否超过或等于数组的最后一个位置。如果是,说明可以成功到达最后一个障碍,直接返回 true。
- 循环结束后,如果没有提前返回,说明可以从第一个障碍开始跳跃,并成功到达最后一个障碍,返回 true。