LeetCode 45. 跳躍游戲 II | Python

45. 跳躍游戲 II


題目來(lái)源:https://leetcode-cn.com/problems/jump-game-ii

題目


給定一個(gè)非負(fù)整數(shù)數(shù)組怪嫌,你最初位于數(shù)組的第一個(gè)位置尝偎。

數(shù)組中的每個(gè)元素代表你在該位置可以跳躍的最大長(zhǎng)度晚树。

你的目標(biāo)是使用最少的跳躍次數(shù)到達(dá)數(shù)組的最后一個(gè)位置。

示例:

輸入: [2,3,1,1,4]
輸出: 2
解釋: 跳到最后一個(gè)位置的最小跳躍數(shù)是 2。
     從下標(biāo)為 0 跳到下標(biāo)為 1 的位置,跳 1 步咆耿,然后跳 3 步到達(dá)數(shù)組的最后一個(gè)位置。

說(shuō)明:

  • 假設(shè)你總是可以到達(dá)數(shù)組的最后一個(gè)位置爹橱。

解題思路


思路:貪婪算法

首先票灰,先注意題意的說(shuō)明部分【假設(shè)你總是可以到達(dá)數(shù)組的最后一個(gè)位置】。這里只需要考慮宅荤,題目中所給出的數(shù)組,是一定能夠到達(dá)數(shù)組的最后一個(gè)位置浸策。

這題要求與之前 55. 跳躍游戲 并不相同冯键,55 題要求的返回是否能夠到達(dá)最后一個(gè)位置。如果用 55 題的反例來(lái)論證本題意義不大庸汗,若覺(jué)得有必要惫确,也可以在無(wú)法到達(dá)時(shí)返回特定的值用以標(biāo)記,例如 0蚯舱。

現(xiàn)在考慮如何去求得到達(dá)最后位置的最小跳躍次數(shù)改化?

在這里,我們考慮使用正向去找可到達(dá)的最遠(yuǎn)位置枉昏。這里以示例 1 為例陈肛,[2,3,1,1,4],索引為 0 的位置兄裂,這里元素值為 2句旱,表示該位置能夠跳躍到達(dá)的位置為后續(xù)兩個(gè)位置,如下圖所示紅色部分:

示例 1 | 圖 1

在這里晰奖,索引為 1 的位置中谈撒,元素值值為 3,表示能夠后續(xù)三個(gè)位置匾南,能到達(dá)最遠(yuǎn)的位置為索引 4啃匿,這里已經(jīng)到達(dá)末尾位置。而索引 2 的位置中蛆楞,值為 1溯乒,這里只能跳躍到索引為 3 的位置。這里顯然從索引 1 的位置跳躍能到達(dá)更遠(yuǎn)的位置臊岸。

假設(shè)數(shù)組后續(xù)還未到達(dá)末尾橙数,,現(xiàn)在選擇先跳到索引 1 的位置帅戒,上面說(shuō)能夠在該位置能跳躍到后續(xù)三個(gè)位置灯帮,這里如何選擇落腳的地方崖技?跟上面討論的一樣,在每個(gè)可到達(dá)的位置钟哥,判斷各自能夠跳躍的最遠(yuǎn)的位置迎献。

現(xiàn)在位置在索引 1 的位置上面,如下圖所示腻贰,3 個(gè)紅色部分就是索引 1 這個(gè)位置能夠跳躍的選擇吁恍,而跳到索引 4 的位置,能夠跳躍更遠(yuǎn)的位置播演,所以此處是當(dāng)前最好的落腳點(diǎn)冀瓦。

示例 | 圖 2

現(xiàn)在考慮如何實(shí)現(xiàn)?我們可以維護(hù)這個(gè)可到達(dá)的最遠(yuǎn)位置写烤,作為邊界翼闽。當(dāng)我們正向遍歷的時(shí)候,當(dāng)?shù)竭_(dá)邊界時(shí)洲炊,就更新這個(gè)邊界感局,相應(yīng)的跳躍次數(shù)加 1。

這里需要注意一點(diǎn)暂衡,我們從正向遍歷的時(shí)候询微,不用遍歷最后一個(gè)位置。根據(jù)上面的說(shuō)明知道狂巢,這里一定會(huì)到達(dá)最后一個(gè)位置撑毛。那么前面所述的需要維護(hù)的這個(gè)邊界,一定是大于或等于最后那個(gè)位置的唧领。如果邊界剛好就在最后的位置時(shí)代态,按照前所述的到達(dá)邊界時(shí),更新邊界疹吃,跳躍次數(shù)加 1 的邏輯蹦疑,這里會(huì)增加不必要的跳躍次數(shù)。所以不考慮訪問(wèn)這個(gè)最后的位置萨驶。

具體的代碼實(shí)現(xiàn)如下歉摧。

代碼實(shí)現(xiàn)


class Solution:
    def jump(self, nums: List[int]) -> int:
        # 定義最遠(yuǎn)位置,邊界腔呜,步數(shù)
        max_pos = 0
        end = 0
        steps = 0
        for i in range(len(nums) - 1):
            # 獲取最遠(yuǎn)可到達(dá)位置
            max_pos = max(max_pos, i + nums[i])
            # 到達(dá)邊界時(shí)叁温,更新邊界
            # 同時(shí)跳躍次數(shù)加 1
            if i == end:
                end = max_pos
                steps += 1
        
        return steps

實(shí)現(xiàn)結(jié)果


實(shí)現(xiàn)結(jié)果

以上就是使用貪心算法,從數(shù)組開(kāi)始正向遍歷核畴,維護(hù)可跳躍最遠(yuǎn)的位置膝但,確定邊界,到達(dá)邊界時(shí)谤草,更新邊界跟束,增加跳躍次數(shù)莺奸,進(jìn)而解決《45. 跳躍游戲 II》問(wèn)題的主要內(nèi)容。


歡迎關(guān)注微信公眾號(hào)《書(shū)所集錄》

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末冀宴,一起剝皮案震驚了整個(gè)濱河市灭贷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌略贮,老刑警劉巖甚疟,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異逃延,居然都是意外死亡览妖,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)揽祥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)黄痪,“玉大人,你說(shuō)我怎么就攤上這事盔然。” “怎么了是嗜?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵愈案,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我鹅搪,道長(zhǎng)站绪,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任丽柿,我火速辦了婚禮恢准,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘甫题。我一直安慰自己馁筐,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布坠非。 她就那樣靜靜地躺著敏沉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪炎码。 梳的紋絲不亂的頭發(fā)上盟迟,一...
    開(kāi)封第一講書(shū)人閱讀 50,084評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音潦闲,去河邊找鬼攒菠。 笑死,一個(gè)胖子當(dāng)著我的面吹牛歉闰,可吹牛的內(nèi)容都是我干的辖众。 我是一名探鬼主播卓起,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼赵辕!你這毒婦竟也來(lái)了既绩?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤还惠,失蹤者是張志新(化名)和其女友劉穎饲握,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蚕键,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡救欧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了锣光。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片笆怠。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖誊爹,靈堂內(nèi)的尸體忽然破棺而出蹬刷,到底是詐尸還是另有隱情,我是刑警寧澤频丘,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布办成,位于F島的核電站,受9級(jí)特大地震影響搂漠,放射性物質(zhì)發(fā)生泄漏迂卢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一桐汤、第九天 我趴在偏房一處隱蔽的房頂上張望而克。 院中可真熱鬧,春花似錦怔毛、人聲如沸员萍。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)充活。三九已至,卻和暖如春蜡娶,著一層夾襖步出監(jiān)牢的瞬間混卵,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工窖张, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留幕随,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓宿接,卻偏偏與公主長(zhǎng)得像赘淮,于是被迫代替她去往敵國(guó)和親辕录。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351