初始思路: maxpos 最远到达位置
last 上次跳跃可到达最远位置,表示本次起跳点范围
如果last == maxpos且maxpos未到达终点则失败
class Solution {
public:
bool canJump(vector<int>& nums) {
int maxpos = 0;
int last = 0;
for(int i = 0; i < nums.size(); ++i){
if(nums[i] + i > maxpos) maxpos = nums[i] + i;
if(maxpos >= nums.size()-1) return true;
if(i == last ){
if(last == maxpos) return false;
last = maxpos;
}
}
return false;
}
};
优化:删去多余变量last
对于判断能否到达问题无需区分跳跃次数,只需要查看当前点是否在可到达范围内即可(合法)
class Solution {
public:
bool canJump(vector<int>& nums) {
int maxpos = 0;
for(int i = 0; i < nums.size(); ++i){
if(nums[i] + i > maxpos) maxpos = nums[i] + i;
if(maxpos >= nums.size()-1) return true;
if(i == maxpos) return false;
}
return false;
}
};