首页 > 其他 > 详细

Jump Game - LeetCode

时间:2019-02-24 20:58:30      阅读:193      评论:0      收藏:0      [点我收藏+]

题目链接

Jump Game - LeetCode

注意点

解法

解法一:贪心算法,只关注能到达最远距离,如果能到达的最远距离大于结尾说明能到达,否则不能。并且如果i超过了能到达的最大距离说明不能到达,因为i是每次加一都能超过最大距离,小于i的所有位置都会走到某个最远距离为0的位置。时间复杂度O(n)

class Solution {
public:
    bool canJump(vector<int>& nums) {
        int n = nums.size(),maxPos = 0;
        for(int i = 0;i <= maxPos;i++)
        {
            if(maxPos >= n-1) return true;
            maxPos = max(maxPos,i+nums[i]);
        }
        return false;
    }
};

技术分享图片

解法二:网上看来的解法 —— 动态规划。但是我并不能理解这个状态转移方程dp[i] = max(dp[i - 1], nums[i - 1]) - 1

class Solution {
public:
    bool canJump(vector<int>& nums) {
        int n = nums.size(),pre = nums[0];
        for(int i = 1;i < n;i++)
        {
            pre = max(pre,nums[i-1])-1;
            if(pre < 0) return false;
        } 
        return true;
    }
};

技术分享图片

小结

  • 希望有大神可以详说一下解法二的思路 TAT

Jump Game - LeetCode

原文:https://www.cnblogs.com/multhree/p/10427775.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!