zoukankan      html  css  js  c++  java
  • 45. Jump Game II

    问题描述:

     

    Given an array of non-negative integers, you are initially positioned at the first index of the array.

    Each element in the array represents your maximum jump length at that position.

    Your goal is to reach the last index in the minimum number of jumps.

    Example:

    Input: [2,3,1,1,4]
    Output: 2
    Explanation: The minimum number of jumps to reach the last index is 2.
        Jump 1 step from index 0 to 1, then 3 steps to the last index.

    Note:

    You can assume that you can always reach the last index.

    解题思路:

    看到求最小的步数,于是我就用了dp,天真如我,超时了:)

    记录一下dp的分析吧

    可以用一维dp数组

    dp[i]代表从起始点到i点的最小距离。

    对每一个元素,我们对它能够到达的点的dp进行更新:

           for(int j = 1; j <= nums[i]; j++){
                    if(i+j >= nums.size())
                        break;
                    dp[i+j] = min(dp[i]+1, dp[i+j]);
                }

    最后求dp[nums.size()]

    然后就超时了,然后我打开相关标签一看,居然是greedy啊我的朋友们!!!!

    代码:

    dp:

    class Solution {
    public:
        int jump(vector<int>& nums) {
            if(nums.size() < 2)
                return 0;
            vector<int> dp(nums.size(), INT_MAX);
            dp[0] = 0;
            for(int i = 0; i < nums.size(); i++){
                for(int j = 1; j <= nums[i]; j++){
                    if(i+j >= nums.size())
                        break;
                    dp[i+j] = min(dp[i]+1, dp[i+j]);
                }
            }
            return dp[nums.size()-1];
        }
    };

    greedy:参考链接图文解释

    朋友们,神一样的解法啊!!!

    O(n)的复杂度

    每次cur是代表最大能到的范围,last代表上一次能到的范围,每当i > last 时,要更新可达范围,以为已经跳出了上一次能走的最大范围

    此时也要更新last到本次能达到的可及范围,同时增加ret。

    class Solution {
    public:
        int jump(vector<int>& nums) {
            int ret = 0;
            int last = 0;
            int cur = 0;
            for(int i = 0; i < nums.size(); i++){
                if(i > last){
                    last = cur;
                    ret++;
                }
                cur = max(cur, i+nums[i]);
            }
            return ret;
        }
    };
  • 相关阅读:
    sql注入之payload
    cve2019-0708漏洞复现
    xss学习
    kernel panic not syncing
    nodeJS爬虫
    JS刷题自制参考知识
    HTML Cookie
    点击按钮触发div颜色改变的几种写法
    Bootstrap4布局(简要)
    jQuery实现论坛发帖Demo
  • 原文地址:https://www.cnblogs.com/yaoyudadudu/p/9165372.html
Copyright © 2011-2022 走看看