题目
Given an array of non-negative integers, you are initially positioned at the first index of the array.
Each element in the array represents your maximum jump length at that position.
Determine if you are able to reach the last index.
For example:
A = [2,3,1,1,4], return true.
A = [3,2,1,0,4], return false.
class Solution {
public:
bool canJump(vector<int>& nums) {
}
};
思路
用一个值maxReach表示当前所能到达的最远距离,在当前所能到达的每一个下标处,判断它们是否能到达更远的地方,即i+nums[i],最后停止时,判断maxReach是否能到达最后一个下标。
代码
class Solution {
public:
bool canJump(vector<int>& nums) {
int maxReach;
int size = nums.size();
if (size <= 1) {
return true;
}
maxReach = nums[0];
for (int i = 1; i < size; i++) {
if (i <= maxReach) {
if (i+nums[i] > maxReach) {
maxReach = i+nums[i];
}
} else {
break;
}
}
if (maxReach < size-1) {
return false;
} else {
return true;
}
}
};
跳跃游戏算法解析
本文介绍了一个经典的算法问题——跳跃游戏。该问题要求判断一个由非负整数构成的数组中,从第一个位置出发能否到达最后一个位置。通过遍历数组并更新可达最远距离的方式解决此问题,提供了一种简洁高效的解决方案。
1028

被折叠的 条评论
为什么被折叠?



