class Solution{
public:
bool canJump(vector<int>& nums) //注意:这里使用bool,函数返回的是布尔型变量,也就是问题要求的,判断是否可以
{
int cover=0; //cover代表跳跃覆盖范围,最开始为0
if(nums.size()==1)return true;
for(int i=0;i<=cover;i++){ //原理是:不断更新cover值,也就是结果值,更新来源是传入的nums
cover=max(i+nums[i],cover);//i+nums[i]表示“从当前位置开始”可以覆盖的最大范围,cover表示已经遍历过的位置表明从那个位置开始,能够到达的最远地方
//max的意义在于如果从当前位置的覆盖范围还不如上一个,或者之前的,那就用之前的
//比如【1,3,1】,cover=0,i+nums=1,到此,可覆盖范围是1,也就是cover=1,下一步
//cover=1,i+nums=4,也就是从nums[1]=3这个位置开始,能到这个位置就能到1+3的位置,此时的最大覆盖范围是4,所以cover更新为4
//比如【3,1,1】,cover=0,i+nums=0+3=3,所以cover=3,next
//cover=3,i+nums=2,也就是从nums[1]=1这个位置开始能覆盖的是i+nums=1+1=2,所以不如直接从nums[0]出发直接到3,从nums[1]出发只能到2
if(cover>=nums.size()-1) return true;
}
return false;
}
};