55. 跳跃游戏

给定一个非负整数数组,你最初位于数组的第一个位置。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个位置。

解法一 动态规划

class Solution {
    enum Index{GOOD,BAD,UNKNOWN};
    vector<Index> memo;
public:
    bool canJump(vector<int>& nums) {
        memo=vector<Index>(nums.size(),UNKNOWN);
        memo[nums.size()-1]=GOOD;

        for(int i=nums.size()-2;i>=0;i--){
            int furthestJumpFromPosition=min(nums[i]+i,(int)nums.size()-1);
            for(int j=i+1;j<=furthestJumpFromPosition;j++){
                if(memo[j]==GOOD){
                    memo[i]=GOOD;
                    break;
                }
            }
        }

        return memo[0]==GOOD;
    }
};

解法二 贪心算法

class Solution {
public:
    bool canJump(vector<int>& nums) {
        int lastPos = nums.size() - 1;
        for (int i = nums.size() - 1; i >= 0; i--) {
            if (i + nums[i] >= lastPos) {
                lastPos = i;
            }
        }

        return lastPos == 0;
    }
};
全部评论

相关推荐

jack_miller:我给我们导员说我不在这里转正,可能没三方签了。导员说没事学校催的时候帮我想办法应付一下
点赞 评论 收藏
分享
双非坐过牢:非佬,可以啊10.28笔试,11.06评估11.11,11.12两面,11.19oc➕offer
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务