• leetcode 55. Jump Game、45. Jump Game II(贪心)


    55. Jump Game

    第一种方法:

    只要找到一个方式可以到达,那当前位置就是可以到达的,所以可以break

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

    第二种方法:

    第一种方法时间复杂度高且需要O(n)的空间复杂度。这题用贪心在O(n)的时间复杂度,O(1)的空间复杂度就可以解决。

    用一个reach变量记录当前位置能达到的最远的位置索引,每次更新,如果reach比当前的索引小伙子reach已经能到达最后一个位置就可以break掉。

    注意:reach及其比较的对象都是数组的索引,即n-1。

    https://www.cnblogs.com/grandyang/p/4371526.html

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

    45. Jump Game II

    https://www.cnblogs.com/grandyang/p/4373533.html

    pre记录的是前一次能达到的最远位置的索引,cur是当前能达到的最远位置的索引。

    你每一次的更新其实都是在前一次最远距离的范围内更新下一次的最远距离。

    这个i是当前遍历的位置。

    class Solution {
    public:
        int jump(vector<int>& nums) {
            int cur = 0,res = 0,i = 0;
            int pre;
            while(cur < nums.size() - 1){
                res++;
                pre = cur;
                for(;i <= pre;i++)
                    cur = max(cur,i + nums[i]);
            }
            return res;
        }
    };
  • 相关阅读:
    python 开源机器学习包
    linux hadoop 集群安装步骤
    bbc 大数据
    微信小程序弹出可填写框两种方法
    js 一个对象的属性名是一个变量怎么处理?
    解决微信小程序使用switchTab跳转后页面不刷新的问题
    SQL 和 NoSQL 的区别
    IndexedDB API
    jQuery jsonp跨域请求
    关于setInterval返回值问题
  • 原文地址:https://www.cnblogs.com/ymjyqsx/p/10709842.html
Copyright © 2020-2023  润新知