跳跃游戏

跳跃游戏Ⅰ

原题链接

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;
    }
};
posted @ 2021-04-20 20:16  Tsukinousag1  阅读(63)  评论(0)    收藏  举报