leetcode 45. 跳躍遊戲--每天刷一道leetcode算法系列!

2021-03-02 程式設計師面試

leetcode 45. 跳躍遊戲--每天刷一道leetcode算法系列!(本篇)

題目描述

給定一個非負整數數組,你最初位於數組的第一個位置。數組中的每個元素代表你在該位置可以跳躍的最大長度。你的目標是使用最少的跳躍次數到達數組的最後一個位置。示例:

輸入: [2,3,1,1,4]輸出: 2解釋: 跳到最後一個位置的最小跳躍數是 2。     從下標為 0 跳到下標為 1 的位置,跳 1 步,然後跳 3 步到達數組的最後一個位置。

說明:假設你總是可以到達數組的最後一個位置。

分析

對於[2,3,1,1,4]來說,我們會怎麼思考。首先index=0,我們可以跳1步來到index=1,也可以跳2步到達index=2.因此跳一次我們能到達的最遠的位置為index=2.然後我們從index=1出發,最多可以跳3步,可以來到index=2,3,4. 此時已經到達末尾。流程結束。假設是[2,2,3,1,4]呢?還是一樣。首先index=0,我們可以跳1步來到index=1,也可以跳2步到達index=2.因此跳一次我們能到達的最遠的位置為index=2.然後我們從index=1出發,最多可以跳2步,可以來到index=2,3。我們從index=2出發的話,最遠跳3步,可以到達位置3,4,5.

總結一下:解決這個問題,我們需要知道上次能到達的位置,作為這一次的起點。然後需要知道此次能到達的最遠的位置,作為下一次的起點

[2, 3,1, 1,2,2,1][2,3, 1,1,2, 2,1][2,3,1,1,2, 2,1]

將數組分成三段,最左邊,已經到達的位置。中間,此次可以到達的位置。右邊,本次不能到達的位置。對於數組[2, 3,1, 1,2,2,1]。第一步可以到達index=1或者index=2.但是如果調到index=1的話顯然下次可以跳的更遠。因此第一步跳到index=1的位置。變成[2,3,1,1,2, 2,1]。第二次可以到達index=2,3,4。顯然跳到index=4的話,下次可以跳的更遠。此時變成[2,3,1,1,2, 2,1 ]。此時一次跳2步到達最右端。總結一下規律,我們在跳的時候會考慮到下一步。根據下一步能跳的最遠的貪心策略,來進行每一步的選擇。

用變量right表示本次能到達的最遠的位置。用變量maxPos表示下次能到達的最遠的位置。則在本位置到right此輪循環中maxPos的變化規律為max(maxPos,nums[i] + i);

代碼
public int jump(int[] nums) {        int cnt = 0;        if (nums == null || nums.length == 0) {            return cnt;        }        int len = nums.length;        int maxPos = 0; //下次最遠能到達的位置        int right = 0;   //本次次最遠能到達的位置        for (int i = 0; i < len - 1; i++) {            maxPos = (nums[i] + i) > maxPos ? (nums[i] + i) : maxPos;            if (i == right) {                cnt++;                right = maxPos;            }
} return cnt; }

相關焦點

  • leetcode 39. 組合總和--每天刷一道leetcode算法系列!
    leetcode 39. 組合總和--每天刷一道leetcode算法系列!(本篇)題目描述給定一個無重複元素的數組 candidates 和一個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。candidates 中的數字可以無限制重複被選取。
  • leetcode 第45題:跳躍遊戲2
    學好算法沒有捷徑,最好的捷徑就是多刷題,並且跳出舒適區,每道題都要尋找最優解,也不能老是做那些你自己比較擅長的題,不定期更新 Leetcode 的題,每道題都會給出多種解法以及最優解。題目描述給定一個非負整數數組,你最初位於數組的第一個位置。數組中的每個元素代表你在該位置可以跳躍的最大長度。
  • leetcode刷題最強指南(版本1.0)
    那麼今天我把這個刷題順序整理出來,是為了幫助更多的學習算法的同學少走彎路!如果你在刷leetcode,強烈建議先按照本篇刷題順序來刷,刷完了你會發現對整個知識體系有一個質的飛躍,不用在題海茫然的尋找方向。
  • ​LeetCode刷題實戰55:跳躍遊戲
    所以,為了提高大家的算法能力,這個公眾號後續每天帶大家做一道算法題,題目就從LeetCode上面選 !今天和大家聊的問題叫做 跳躍遊戲,我們先來看題面:https://leetcode-cn.com/problems/jump-game/Given an array of non-negative integers, you are initially positioned at the first index of the
  • 每天學一道leetcode:152.乘積最大子序列
    面試各位同學大家好,歡迎閱讀小王同學的長篇連載文章之《每天學一道leetcode》。如果您對網際網路技術、算法知識、程式設計師個人發展感興趣,歡迎關注小王同學,小王同學將會在該領域持續更新。同時,如果您有任何建議或者想法,歡迎留言給小王。
  • ​LeetCode刷題實戰45:跳躍遊戲 II
    算法的重要性,我就不多說了吧,想去大廠,就必須要經過基礎知識和業務邏輯面試+算法面試
  • 如何科學的刷 Leetcode
    它是一個編程實踐網站,主要注重於培養使用者的編程技巧,去解決一些巧妙的算法題。這是它的官網,https://leetcode.com。Leetcode 官網很久以前,還是在大學的時候,有師兄對我意味深長的說,如果把 Leetcode 上面的題目做上七遍,就有很大概率能夠通過谷歌的面試。
  • leetcode刷對了麼
    今天,逆行君就帶你從世界觀和方法論兩方面走進「leetcode」 leetcode之世界觀 什麼是leetcode 簡單來說,leetcode是一個美國的在線編程網站,它收集了各大公司的經典算法面試題,用戶可以選擇不同的語言進行代碼的在線編寫、編譯和調試。
  • 字節大佬Leetcode刷題筆記,看完吊打問你算法的面試官
    介紹leetcode 題解,記錄自己的 leetcode 解題之路。目前分為五個部分:第一個部分是 leetcode 經典題目的解析,包括思路,關鍵點和具體的代碼實現。第二部分是對於數據結構與算法的總結第三部分是 anki 卡片, 將 leetcode 題目按照一定的方式記錄在 anki 中,方便大家記憶。
  • 每天一道leetcode61-旋轉鍊表
    正當班主任要繼續發話,只聽到角落默默想起來一個聲音:」K2」前言 2018.11.21號打卡今天的題目leetcode26:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/description/昨天的題解題目 每天一道leetcode61
  • 每天一道leetcode18-四數之和
    正當班主任要繼續發話,只聽到角落默默想起來一個聲音:」K2」前言 2018.11.20號打卡今天的題目leetcode61:https://leetcode-cn.com/problems/rotate-list/description/昨天的題解題目 每天一道leetcode18- 四數之和分類:雙指針
  • 每天學一道leetcode:103. 二叉樹的鋸齒形層次遍歷
    前言歡迎閱讀小王同學的長篇連載文章之《每天學一道leetcode》。如果您從前做過這道題目,可以從小王同學的文章裡增強對該題目的記憶和印象,思考一下小王同學給出的思路和解法有沒有優化的空間。如果您對網際網路技術、算法知識、程式設計師個人發展感興趣,歡迎關注小王同學,小王同學將會在該領域持續更新。與此同時,如果您有任何建議或者想法,歡迎留言給小王。
  • 六十四、開始刷Leetcode之旅(Python版本)
    只要我在每篇博文中寫得自己體會,修煉身心;在每天的不斷重複學習中,耐住寂寞,練就真功,不畏艱難,奮勇前行,不忘初心,砥礪前行,人生定會有所收穫,不留遺憾 (作者:Runsen )作者介紹:Runsen目前大三下學期,專業化學工程與工藝,大學沉迷日語,Python, Java和一系列數據分析軟體。導致翹課嚴重,專業排名中下。.
  • 或許是比力扣 leetcode 更好的選擇?推薦兩個編程算法寶藏網站
    簡介:雖然會有朋友吐槽 leetcode 題目過於簡單,但也並不是人人都要去刷最難的題,比如把自己的練成信息學奧林匹克競賽(Olympiad in
  • Anki實戰-刷leetcode之「141-環形鍊表」
    有同學說自己刷leetcode的時候每次刷完就忘,忘了再刷。
  • 刷LeetCode 對於國內 IT 企業面試幫助大嗎?
    今年大三,大四要找工作了,沒搞過ACM(其實挺後悔的),校招面試都考算法的,我這種沒搞過ACM的感覺挺沒競爭力的,同學有推薦leetcode的,不知對於國內的IT企業面試幫助大嗎?對於 BAT 等一線大廠來說,算法面試是必須跨過去的一道坎,所以必須得準備好算法面試~但很多時候,你即使提前複習了這些最常見的面試算法題,你依舊無法通過算法面試!為什麼?你在提前準備複習的時候,在網上找了半天響應題目的分析文章,但你看了就是不懂。你在面試的時候,卡殼了,一時間忘了怎麼寫代碼了我來助你一臂之力!!
  • 帶你狂刷算法Leetcode題!短時間內快速獲得實戰能力!
    要想掌握算法,必不可少的環節就是刷Leetcode題,它不僅是各類大廠面試的出題寶庫,也是幫助你務實算法理論功底最好的方式。
  • C#刷遍Leetcode面試題系列連載(1) - 入門與工具簡介
    什麼要刷LeetCode大家都知道,很多對算法要求高一點的軟體公司,比如美國的FLAGM (Facebook、LinkedIn、Amazon/Apple、Google、Microsoft),或國內大廠BAT、TMD、華為,以及國內新興的 AI 公司等等,都對算法水平有所要求。據悉知名遊戲公司的算法崗收入很高,相應的對算法要求也比較高。
  • ​LeetCode刷題實戰139:單詞拆分
    算法的重要性,我就不多說了吧,想去大廠,就必須要經過基礎知識和業務邏輯面試+算法面試。
  • LeetCode按照怎樣的順序來刷題比較好?
    分享一下身邊大神的刷題順序:如果你時間比較緊迫,為了找工作而刷題,我建議你先刷熱門推薦,一共兩百多道題。先刷熱題 HOT 100,再刷精選 TOP 面試題,之後刷其他的題。算法學習 LintCode:https://www.lintcode.com/算法學習網站,上去每天刷兩道算法題,走遍天下都不怕。2.