最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實(shí)現(xiàn)LeetCode(55.跳躍游戲)

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

[LeetCode] 55. Jump Game 跳躍游戲

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.

Determine if you are able to reach the last index.

Example 1:

Input: [2,3,1,1,4]
Output: true
Explanation: Jump 1 step from index 0 to 1, then 3 steps to the last index.

Example 2:

Input: [3,2,1,0,4]
Output: false
Explanation: You will always arrive at index 3 no matter what. Its maximum
jump length is 0, which makes it impossible to reach the last index.

這道題說(shuō)的是有一個(gè)非負(fù)整數(shù)的數(shù)組,每個(gè)數(shù)字表示在當(dāng)前位置的最大跳力(這里的跳力指的是在當(dāng)前位置為基礎(chǔ)上能到達(dá)的最遠(yuǎn)位置),求判斷能不能到達(dá)最后一個(gè)位置,開(kāi)始博主以為是必須剛好到達(dá)最后一個(gè)位置,超過(guò)了不算,其實(shí)是理解題意有誤,因?yàn)槊總€(gè)位置上的數(shù)字表示的是最大的跳力而不是像玩大富翁一樣搖骰子搖出幾一定要走幾。這里可以用動(dòng)態(tài)規(guī)劃 Dynamic Programming 來(lái)解,維護(hù)一個(gè)一維數(shù)組 dp,其中 dp[i] 表示達(dá)到i位置時(shí)剩余的跳力,若到達(dá)某個(gè)位置時(shí)跳力為負(fù)了,說(shuō)明無(wú)法到達(dá)該位置。接下來(lái)難點(diǎn)就是推導(dǎo)狀態(tài)轉(zhuǎn)移方程啦,想想啊,到達(dá)當(dāng)前位置的剩余跳力跟什么有關(guān)呢,其實(shí)是跟上一個(gè)位置的剩余跳力(dp 值)和上一個(gè)位置新的跳力(nums 數(shù)組中的值)有關(guān),這里新的跳力就是原數(shù)組中每個(gè)位置的數(shù)字,因?yàn)槠浯砹艘援?dāng)前位置為起點(diǎn)能到達(dá)的最遠(yuǎn)位置。所以當(dāng)前位置的剩余跳力(dp 值)和當(dāng)前位置新的跳力中的較大那個(gè)數(shù)決定了當(dāng)前能到的最遠(yuǎn)距離,而下一個(gè)位置的剩余跳力(dp 值)就等于當(dāng)前的這個(gè)較大值減去1,因?yàn)樾枰ㄒ粋€(gè)跳力到達(dá)下一個(gè)位置,所以就有狀態(tài)轉(zhuǎn)移方程了:dp[i] = max(dp[i - 1], nums[i - 1]) - 1,如果當(dāng)某一個(gè)時(shí)刻 dp 數(shù)組的值為負(fù)了,說(shuō)明無(wú)法抵達(dá)當(dāng)前位置,則直接返回 false,最后循環(huán)結(jié)束后直接返回 true  即可,參見(jiàn)代碼如下:

解法一:

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

其實(shí)這題最好的解法不是 DP,而是貪婪算法 Greedy Algorithm,因?yàn)檫@里并不是很關(guān)心每一個(gè)位置上的剩余步數(shù),而只希望知道能否到達(dá)末尾,也就是說(shuō)我們只對(duì)最遠(yuǎn)能到達(dá)的位置感興趣,所以維護(hù)一個(gè)變量 reach,表示最遠(yuǎn)能到達(dá)的位置,初始化為0。遍歷數(shù)組中每一個(gè)數(shù)字,如果當(dāng)前坐標(biāo)大于 reach 或者 reach 已經(jīng)抵達(dá)最后一個(gè)位置則跳出循環(huán),否則就更新 reach 的值為其和 i + nums[i] 中的較大值,其中 i + nums[i] 表示當(dāng)前位置能到達(dá)的最大位置,參見(jiàn)代碼如下:

解法二:

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

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

相關(guān)文章

  • C++11的右值引用的具體使用

    C++11的右值引用的具體使用

    這篇文章主要介紹了C++11的右值引用的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • VC++的combobox控件用法匯總

    VC++的combobox控件用法匯總

    這篇文章主要介紹了VC++的combobox控件用法,對(duì)VC++初學(xué)者來(lái)說(shuō)尤為重要,需要的朋友可以參考下
    2014-08-08
  • C語(yǔ)言實(shí)現(xiàn)用?*?打印X形圖案

    C語(yǔ)言實(shí)現(xiàn)用?*?打印X形圖案

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)用?*?打印X形圖案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C++?引用與內(nèi)聯(lián)函數(shù)詳情

    C++?引用與內(nèi)聯(lián)函數(shù)詳情

    這篇文章主要介紹了C++?引用與內(nèi)聯(lián)函數(shù)詳情,主要分享一下關(guān)于引用的知識(shí)點(diǎn),這里都是一些比較基礎(chǔ)的知識(shí),適合初學(xué)者,下文續(xù)航徐介紹需要的小伙伴可以參考一下
    2022-05-05
  • 如何利用C語(yǔ)言輸出3D立體感心形圖詳解

    如何利用C語(yǔ)言輸出3D立體感心形圖詳解

    其實(shí)我們?cè)诔绦蛑幸灿泻芏鄻?lè)趣的,只是很多人不善于發(fā)現(xiàn),這篇文章主要給大家介紹了關(guān)于C語(yǔ)言輸出3D立體感心形圖的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-12-12
  • C++隊(duì)列用法實(shí)例

    C++隊(duì)列用法實(shí)例

    這篇文章主要介紹了C++隊(duì)列用法,實(shí)例分析了C++實(shí)現(xiàn)隊(duì)列的入隊(duì)、出隊(duì)、讀取與判斷等相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • C++中的不規(guī)則二維數(shù)組實(shí)現(xiàn)代碼

    C++中的不規(guī)則二維數(shù)組實(shí)現(xiàn)代碼

    本文介紹了一個(gè)在C++中保存不定長(zhǎng)二維數(shù)組的數(shù)據(jù)結(jié)構(gòu),在這個(gè)結(jié)構(gòu)中,我們使用了一個(gè)含有指針和數(shù)組長(zhǎng)度的結(jié)構(gòu)體,用這樣的一個(gè)結(jié)構(gòu)體構(gòu)造一個(gè)結(jié)構(gòu)體數(shù)組,用于存儲(chǔ)每一個(gè)不定長(zhǎng)的數(shù)組,感興趣的朋友一起看看吧
    2024-03-03
  • C語(yǔ)言示例講解while循環(huán)語(yǔ)句的用法

    C語(yǔ)言示例講解while循環(huán)語(yǔ)句的用法

    在不少實(shí)際問(wèn)題中有許多具有規(guī)律性的重復(fù)操作,因此在程序中就需要重復(fù)執(zhí)行某些語(yǔ)句。一組被重復(fù)執(zhí)行的語(yǔ)句稱(chēng)之為循環(huán)體,C語(yǔ)言while語(yǔ)句可以是單個(gè)語(yǔ)句,也可以是一個(gè)語(yǔ)句塊,其條件可以是任意表達(dá)式,true是任意非零值,當(dāng)條件為真時(shí),循環(huán)進(jìn)行迭代
    2022-06-06
  • C++中的覆蓋和隱藏詳解

    C++中的覆蓋和隱藏詳解

    這篇文章主要介紹了C++中重載、重寫(xiě)(覆蓋)和隱藏的區(qū)別,是C++面向?qū)ο蟪绦蛟O(shè)計(jì)非常重要的概念,需要的朋友可以參考下,希望能夠給你帶來(lái)幫助
    2021-08-08
  • Qt定時(shí)器和隨機(jī)數(shù)詳解

    Qt定時(shí)器和隨機(jī)數(shù)詳解

    在前一篇中我們介紹了鍵盤(pán)和鼠標(biāo)事件,其實(shí)還有一個(gè)非常常用的事件,就是定時(shí)器事件,如果要對(duì)程序?qū)崿F(xiàn)時(shí)間上的控制,那么就要使用到定時(shí)器。而隨機(jī)數(shù)也是很常用的一個(gè)功能,在我們要想產(chǎn)生一個(gè)隨機(jī)的結(jié)果時(shí)就要使用到隨機(jī)數(shù)。本文我們就來(lái)簡(jiǎn)單介紹一下定時(shí)器和隨機(jī)數(shù)。
    2015-06-06

最新評(píng)論

兰溪市| 龙胜| 合作市| 红河县| 江西省| 共和县| 若尔盖县| 凤山市| 迁西县| 衡南县| 库伦旗| 华宁县| 鄂托克旗| 桑日县| 都江堰市| 关岭| 鹿邑县| 彭山县| 昔阳县| 翁源县| 思茅市| 绥江县| 彰化县| 华安县| 贞丰县| 宜州市| 册亨县| 潼南县| 宁都县| 阿拉善右旗| 德钦县| 宝兴县| 五莲县| 永兴县| 东光县| 察隅县| 历史| 祁阳县| 南皮县| 北流市| 五寨县|