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。

京公网安备 11010502036488号