【方法一:动态规划】
bool canJump(vector<int>& nums) {
int n=nums.size();
vector<bool> f(n);//f[i]表示都能够有到达第i块石头
f[0]=true;//初始化
for(int j=1;j<n;++j)
{
f[j]=false;
for(int i=0;i<j;++i)
{
if(f[i]&&(nums[i]>=j-i)){
f[j]=true;
break;
}
}
}
return f[n-1];
}
【方法二:贪心算法】
如果i位置能到达,则更新能够到达的最远位置。一直到可以到达最后一块石头。
bool canJump(vector<int>& nums) {
int maxDis=0;
for (int i = 0; i <nums.size(); i++)
{
if(maxDis>=i) maxDis=max(maxDis,i+nums[i]);//如果当前位置能到达,更新最远距离
if(maxDis>=nums.size()-1)return true;
}
return false;
}