zoukankan      html  css  js  c++  java
  • 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;
        }
    };
  • 相关阅读:
    在esx上 docker的网络桥接
    docker 配置桥接网络
    docker 配置桥接网络
    perl 创建包
    perl 创建包
    perl 一个简单的面向对象的例子
    perl 一个简单的面向对象的例子
    perl 对象 bless 引用
    【技术角度看问题之一】ARM到底是个啥?
    【nodejs原理&源码赏析(3)】欣赏手术级的原型链加工艺术
  • 原文地址:https://www.cnblogs.com/ymjyqsx/p/10709842.html
Copyright © 2011-2022 走看看