跳跃游戏Ⅰ

class Solution {
public:
bool canJump(vector<int>& nums) {
//每个位置都计算自己所能到达的最远距离,同时要判断自己是否可以到达
//能到达得情况下,更新所能到达得新的最远距离
//最后判断是否大于等于nums的长度
int n=nums.size();
if(n<=1)
return true;
int maxdis=nums[0];
for(int i=1;i<n;i++)
{
if(i<=maxdis)
maxdis=max(maxdis,nums[i]+i);
}
return maxdis>=n-1;
}
};
跳跃游戏Ⅱ

class Solution {
public:
int jump(vector<int>& nums) {
int n=nums.size();
int maxdis=0;
int step=0,end=0;
for(int i=0;i<n-1;i++)
{
if(i<=maxdis)
//选取下一步最优
maxdis=max(maxdis,nums[i]+i);
if(i==end)
{
end=maxdis;
++step;
}
}
return step;
}
};