策略是从后往前反推,每次取离终点最远的,不断移动fIndex指针直到0,取最远的是因为越前面的步骤可选的越多,直接取最远的可以减小计算。
class Solution {
public:
bool canJump(vector<int>& nums) {
int len=nums.size();
int fIndex=len-1;
int dis[len];
for(int i=0;i<len;i++)
dis[i]=0;
bool breakFlag=true;
while(fIndex!=0){
for(int i=fIndex-1;i>=0;i--){
breakFlag=true;
dis[i]=fIndex-i;
if(dis[i]<=nums[i]){
fIndex=i;
breakFlag=false;
}
}
if(breakFlag==true)
return false;
}
return true;
}
};