【原题】
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) {
if(nums.size() <= 1){
return true;
}
int index=0;
while(index < nums.size() && nums[index] != 0){
index += nums[index];
if(index >= nums.size()-1){
return true;
}
}
return false;
}
};
正确解法:贪心算法
class Solution {
public:
bool canJump(vector<int>& nums) {
if(nums.size() <= 1){
return true;
}
int index=0;
for(int i=0; (i<nums.size()) && (i<=index); i++){//再加一个从头开始一个一个遍历的指针,看最大步数之内别的走法
index = max(i+nums[i], index);
if(index >= (nums.size()-1)){
return true;
}
}
//如果没有解法,index会停在某个位置一直不增加,只有i在自增,一直增到超过index或者超过数组长度
return false;
}
};