最开始想倒叙遍历,没有0.直接返回true,遇见0,记住0的位置=t,往前遍历。寻找n[i]+i>t,若不能返回false。奈何代码写出来跑不过所有的例子。于是乎看了解答,使用贪心算法
class Solution {
public:
bool canJump(vector<int>& nums) {
int k=0,n=nums.size();
for(int i=0;i<n;++i){
if(i>k) return false;
k=max(k,nums[i]+i);
}
return true;
}
};
动态规划
class Solution {
public:
bool canJump(vector<int>& nums) {
int n=nums.size();
int dp[n];
dp[0]=nums[0];
for(int i=1;i<n;++i){
if(dp[i-1]==0){
return false;
}
dp[i]=max(dp[i-1]-1,nums[i]);
}
return true;
}
};