题目
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;
}
}
};