欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++實現(xiàn)LeetCode(45.跳躍游戲之二)

 更新時間:2021年07月12日 15:42:59   作者:Grandyang  
這篇文章主要介紹了C++實現(xiàn)LeetCode(45.跳躍游戲之二),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下

[LeetCode] 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.

這題是之前那道 Jump Game 的延伸,那題是問能不能到達最后一個數(shù)字,而此題只讓求到達最后一個位置的最少跳躍數(shù),貌似是默認一定能到達最后位置的? 此題的核心方法是利用貪婪算法 Greedy 的思想來解,想想為什么呢? 為了較快的跳到末尾,想知道每一步能跳的范圍,這里貪婪并不是要在能跳的范圍中選跳力最遠的那個位置,因為這樣選下來不一定是最優(yōu)解,這么一說感覺又有點不像貪婪算法了。其實這里貪的是一個能到達的最遠范圍,遍歷當前跳躍能到的所有位置,然后根據(jù)該位置上的跳力來預測下一步能跳到的最遠距離,貪出一個最遠的范圍,一旦當這個范圍到達末尾時,當前所用的步數(shù)一定是最小步數(shù)。需要兩個變量 cur 和 pre 分別來保存當前的能到達的最遠位置和之前能到達的最遠位置,只要 cur 未達到最后一個位置則循環(huán)繼續(xù),pre 先賦值為 cur 的值,表示上一次循環(huán)后能到達的最遠位置,如果當前位置i小于等于 pre,說明還是在上一跳能到達的范圍內(nèi),根據(jù)當前位置加跳力來更新 cur,更新 cur 的方法是比較當前的 cur 和 i + A[i] 之中的較大值,如果題目中未說明是否能到達末尾,還可以判斷此時 pre 和 cur 是否相等,如果相等說明 cur 沒有更新,即無法到達末尾位置,返回 -1,代碼如下:

解法一:

class Solution {
public:
    int jump(vector<int>& nums) {
        int res = 0, n = nums.size(), i = 0, cur = 0;
        while (cur < n - 1) {
            ++res;
            int pre = cur;
            for (; i <= pre; ++i) {
                cur = max(cur, i + nums[i]);
            }
            if (pre == cur) return -1; // May not need this
        }
        return res;
    }
};

還有一種寫法,跟上面那解法略有不同,但是本質(zhì)的思想還是一樣的,這里 cur 是當前能到達的最遠位置,last 是上一步能到達的最遠位置,遍歷數(shù)組,首先用 i + nums[i] 更新 cur,這個在上面解法中講過了,然后判斷如果當前位置到達了 last,即上一步能到達的最遠位置,說明需要再跳一次了,將 last 賦值為 cur,并且步數(shù) res 自增1,這里小優(yōu)化一下,判斷如果 cur 到達末尾了,直接 break 掉即可,代碼如下:

解法二:

class Solution {
public:
    int jump(vector<int>& nums) {
        int res = 0, n = nums.size(), last = 0, cur = 0;
        for (int i = 0; i < n - 1; ++i) {
            cur = max(cur, i + nums[i]);
            if (i == last) {
                last = cur;
                ++res;
                if (cur >= n - 1) break;
            }
        }
        return res;
    }
};

到此這篇關(guān)于C++實現(xiàn)LeetCode(45.跳躍游戲之二)的文章就介紹到這了,更多相關(guān)C++實現(xiàn)跳躍游戲之二內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++中的基類和派生類構(gòu)造函數(shù)示例詳解

    C++中的基類和派生類構(gòu)造函數(shù)示例詳解

    這篇文章主要介紹了C++的基類和派生類構(gòu)造函數(shù),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • C++實現(xiàn)LeetCode(211.添加和查找單詞-數(shù)據(jù)結(jié)構(gòu)設(shè)計)

    C++實現(xiàn)LeetCode(211.添加和查找單詞-數(shù)據(jù)結(jié)構(gòu)設(shè)計)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(211.添加和查找單詞-數(shù)據(jù)結(jié)構(gòu)設(shè)計),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C++實現(xiàn)日期類(Date類)的方法

    C++實現(xiàn)日期類(Date類)的方法

    下面小編就為大家?guī)硪黄狢++實現(xiàn)日期類(Date類)的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • C++如何實現(xiàn)廣義表詳解

    C++如何實現(xiàn)廣義表詳解

    廣義表是非線性結(jié)構(gòu),其定義是遞歸的。那么下面跟著小編一起看看如何用C++實現(xiàn)廣義表,有需要的可以參考借鑒。
    2016-08-08
  • 詳解為什么指針被譽為C語言靈魂

    詳解為什么指針被譽為C語言靈魂

    說到指針,就不可能脫離開內(nèi)存,學會指針的人分為兩種,一種是不了解內(nèi)存模型,另外一種則是了解。不了解的對指針的理解就停留在“指針就是變量的地址”這句話,會比較害怕使用指針,特別是各種高級操作。本文將帶你詳細了解C語言指針
    2021-06-06
  • C++實現(xiàn)猜數(shù)字小游戲

    C++實現(xiàn)猜數(shù)字小游戲

    這篇文章主要為大家詳細介紹了C++實現(xiàn)猜數(shù)字小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • Qt鍵盤事件實現(xiàn)圖片在窗口上下左右移動

    Qt鍵盤事件實現(xiàn)圖片在窗口上下左右移動

    這篇文章主要為大家詳細介紹了Qt鍵盤事件實現(xiàn)圖片在窗口上下左右移動,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C語言實現(xiàn)數(shù)組移位、前移、后移與整體移動實例代碼

    C語言實現(xiàn)數(shù)組移位、前移、后移與整體移動實例代碼

    C語言中通??梢允褂醚h(huán)語句實現(xiàn)數(shù)組的移動,下面這篇文章主要給大家介紹了關(guān)于C語言實現(xiàn)數(shù)組移位、前移、后移與整體移動的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-03-03
  • C++實現(xiàn)數(shù)據(jù)文件存儲與加載

    C++實現(xiàn)數(shù)據(jù)文件存儲與加載

    這篇文章主要為大家詳細介紹了C++實現(xiàn)數(shù)據(jù)文件存儲與加載,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • VC實現(xiàn)五子棋游戲的一個算法示例

    VC實現(xiàn)五子棋游戲的一個算法示例

    這篇文章主要介紹了VC實現(xiàn)五子棋游戲的一個算法示例,對于學習數(shù)據(jù)結(jié)構(gòu)與算法的朋友有一定的借鑒價值,需要的朋友可以參考下
    2014-08-08

最新評論