给你一个非负整数数组 nums
,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个下标,如果可以,返回 true
;否则,返回 false
。
示例 1:
输入:nums = [2,3,1,1,4] 输出:true 解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。
示例 2:
输入:nums = [3,2,1,0,4] 输出:false 解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。
这道题的思路就是每一次循环记录当前状态下能够达到的最右侧的的坐标,当这个最大值大于等于数组中最有一个元素的位置时(其实也就是数组长度-1(因为数组的下标从0开始))说明可以达到最后一个坐标输出true,否则输出false
class Solution {
// 方法用于确定是否可以跳到数组的最后一个索引
public boolean canJump(int[] nums) {
int position = nums.length; // nums数组的长度
int r = 0; // 初始化最大可达索引
// 遍历数组
for (int i = 0; i < position; i++) {
// 更新最大可达索引
r = Math.max(r, i + nums[i]);
// 如果最大可达索引大于或等于最后一个索引
// 返回true,表示可以达到最后一个索引
if (r >= position - 1) {
return true;
}
}
// 如果无法达到最后一个索引
return false;
}
}
-
类和方法声明:
class Solution {
: 定义了一个名为Solution
的类。public boolean canJump(int[] nums) {
: 定义了一个公共方法canJump
,接受一个整数数组nums
作为输入,并返回一个布尔值。
-
变量初始化:
int position = nums.length;
: 存储了数组nums
的长度,即最后一个索引加一。int r = 0;
: 将r
初始化为0。用于记录最大可达索引。
-
For循环解释:
for (int i = 0; i < position; i++) {
: 遍历数组中的每个索引。
-
更新最大可达索引:
r = Math.max(r, i + nums[i]);
: 更新r
,使其成为当前值和索引i
加上跳跃距离nums[i]
的最大值。这计算了从当前位置i
能够到达的最远索引。
-
检查是否能达到最后一个索引:
if (r >= position - 1) {
: 检查r
是否大于或等于最后一个索引 (position - 1
)。如果是,则表示从当前位置i
可以达到最后一个索引,返回true
。
-
返回结果:
return false;
: 如果循环完成后r
没有达到最后一个索引,返回false
,表示无法达到最后一个索引