该题标签是贪心,动态规划,数组,中等题
下面是AC代码
class Solution {
public:
bool canJump(vector<int>& nums) {
//获取数组长度
int a=nums.size();
//如果长度为1,则直接达到最后一个下标,返回true
if(a==1) return true;
//for循环遍历数组
for(int i=0;i<a;){
//因为跳跃长度是一个范围区域
//t是在本次跳跃后,下次可以跳跃的最大距离
int t=0;
//对应t的最大距离的下标,也就是这次跳跃的最优跳跃位置
int t1=0;
//遍历本次可以跳跃范围的区间,获得最优值
//如果nums[i]==0则不会进入循环,则说明此时所在位置为0,直接返回false
if(nums[i]==0) return false;
for(int j=i+1;j<=nums[i]+i;j++){
//for中的j的取值范围为nums[i]+j,如果a-1小于等于nums[i]+j,
//那么当前一定可以直接跳到最后一个下标,返回true;
if(j>=a-1) return true;
//判断t与当前跳跃距离,获取最大跳跃距离
if(t<=nums[j]+j){
t1=j;
t=nums[j]+j;
}
}
//如果最大跳跃距离大于a-1,一定可以跳到最后一个坐标,返回true
if(t>=a-1) return true;
//将跳到t1位置,
i=t1;
}
return true;
}
};