You are given an integer array nums
. You are initially positioned at the array’s first index, and each element in the array represents your maximum jump length at that position.
Return true if you can reach the last index, or false otherwise.
给定一个整数数组 nums
。你最初位于数组的第一个索引处,数组中的每个元素代表你在该位置的最大跳跃长度。
如果你能到达最后一个索引,则返回 true;否则返回 false。
Example 1:
nums = [2,3,1,1,4]
true
Example 2:
nums = [3,2,1,0,4]
false
1 <= nums.length <= 10^4
0 <= nums[i] <= 10^5
此代码实现了判断是否能从数组的第一个索引跳跃到最后一个索引的功能。
max_reach 记录当下能够到达的最远距离,在遍历的过程中,不断更新能够到达的最远距离max_reach,直到能够到达最后一个位置。
算法的主要步骤如下:
初始化变量:
max_reach
: 用于存储目前能够到达的最远索引,初始设置为0。遍历数组:
i
达到 max_reach
或超过它。max_reach
为当前索引 i
和 i + nums[i]
(即当前位置能跳到的最远索引)的较大值。max_reach
大于或等于数组的最后一个索引(nums.size() - 1
),则表示可以跳到最后一个索引,返回 true
。返回结果:
false
。class Solution {
public:
bool canJump(vector<int>& nums) {
int max_reach = 0;
for (int i = 0; i <= max_reach; i++) {
max_reach = max(max_reach, i + nums[i]);
if (max_reach >= nums.size() - 1) {
return true;
}
}
return false;
}
};