leetcode 每日一題:746. 使用最小花費爬樓梯

2021-03-02 FluentStudy

一起刷題吧

一、題目分析

輸入:由數值組成的數組
輸出:到達樓層頂部的最低花費
難度:簡單
標籤:貪心,動態規劃

示例 1:
輸入: cost = [10, 15, 20]
輸出: 15
解釋: 最低花費是從cost[1]開始,然後走兩步即可到階梯頂,一共花費15。

示例 2:
輸入: cost = [1, 100, 1, 1, 1, 100, 1, 1, 100, 1]
輸出: 6
解釋: 最低花費方式是從cost[0]開始,逐個經過那些1,跳過cost[3],一共花費6。

二、參考代碼

這個題是動態規劃裡比較簡單的題目,動態方程也比較好想:

F[i] 表示走到第 i 層需要的最小的步數,只是走到
F[i] = min(F[i-1] + cost[i-1], F[i-2] + cost[i-2])
最終結果是 F[len(cost)] 即走過第 len(cost)-1 層

參考代碼如下:

from typing import List


class Solution:
    def minCostClimbingStairs(self, cost: List[int]) -> int:
        if not cost:
            return 0
        # F[i] 表示走到第 i 層需要的最小的步數,只是走到
        # F[i] = min(F[i-1] + cost[i-1], F[i-2] + cost[i-2])
        # 最終結果是 F[len(cost)] 即走過第 len(cost)-1 層

        F = [0] * (len(cost) + 1)

        for i in range(2, len(cost)+1):
            F[i] = min(F[i-1]+cost[i-1], F[i-2] + cost[i-2])
        return F[-1]

對空間做優化,只需要前兩次的狀態,不需要使用一個數組,優化代碼如下:

class Solution:
    def minCostClimbingStairs(self, cost: List[int]) -> int:
        if not cost:
            return 0
        # F[i] 表示走到第 i 層需要的最小的步數,只是走到
        # F[i] = min(F[i-1] + cost[i-1], F[i-2] + cost[i-2])
        # 最終結果是 F[len(cost)] 即走過第 len(cost)-1 層

        # 上一個,上上一個
        lp, fp = 0, 0
        for i in range(2, len(cost)+1):
            fp, lp = lp, min(lp+cost[i-1], fp + cost[i-2])
        return lp

三、相似題目

這個題目有個相似題目:70. 爬樓梯:https://leetcode-cn.com/problems/climbing-stairs/

這個題目的動態規劃方程是類似的,這裡直接給出實現代碼:

class Solution:
    def climbStairs(self, n: int) -> int:
        if not n:
            return 0

        if n < 2:
            return 1

        # F[i] 表示到第 i 階臺階需要多少步子
        # F[i] = F[i-1] + F[i-2]

        F = [0] * (n + 1)
        F[1] = 1
        F[2] = 2

        for i in range(3, n+1):
            F[i] = F[i-1] + F[i-2]
        return F[-1]

同樣也可以對空間做優化,這裡就不實現了

相關焦點

  • ​LeetCode刷題實戰70:爬樓梯
    所以,為了提高大家的算法能力,這個公眾號後續每天帶大家做一道算法題,題目就從LeetCode上面選 !今天和大家聊的問題叫做 爬樓梯,我們先來看題面:https://leetcode-cn.com/problems/climbing-stairs/You are climbing a stair case.
  • 動態規劃刷題篇(1) 斐波那契、爬樓梯、路徑與最長遞增子序列
    爬樓梯假設你正在爬樓梯。需要 n 階你才能到達樓頂。使用最小花費爬樓梯數組的每個下標作為一個階梯,第 i 個階梯對應著一個非負數的體力花費值每當你爬上一個階梯你都要花費對應的體力值,一旦支付了相應的體力值,你就可以選擇向上爬一個階梯或者爬兩個階梯。請你找出達到樓層頂部的最低花費。在開始時,你可以選擇從下標為 0 或 1 的元素作為初始階梯。輸入:cost = [10, 15, 20]輸出:15解釋:最低花費是從 cost[1] 開始,然後走兩步即可到階梯頂,一共花費 15 。
  • 【LeetCode之C#解法】 移動零、爬樓梯
    https://leetco} } }https://leetcoleetcode-cn.com/problems/climbing-stairs/70. 爬爬樓梯假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2個臺階。你有多少種不同的方法可以爬到樓頂呢?
  • LeetCode 70 爬樓梯
    1)動態規劃‍‍‍‍‍本問題其實常規解法可以分成多個子問題,爬第n階樓梯的方法數量,等於2部分之和1.爬上n- 1階樓梯的方法數量。因為再爬1階就能到第n階2.爬上n - 2階樓梯的方法數量,因為再爬2階就能到第n階所以我們得到公式 dp[n] = dp[n - 1] + dp[n - 2]同時需要初始化dp[0]= 1和dp[1]= 1‍2)代碼呈現class Solution
  • leetcode每日一題:49.字母異位詞分組
    leetcode每日一題:49.字母異位詞分組:https://leetcode-cn.com/problems/group-anagrams/一起刷題吧一、題意分析 輸入:由字符串組成的列表(數組)輸出:將由同樣的字母和字母個數組成的不同序列放在一個列表裡,然後整體做為一個列表輸出難度
  • 每天爬樓梯能瘦腿嗎 堅持爬樓梯爬出纖細美腿
    核心提示:每天爬樓梯能瘦腿嗎?大家只要每日家堅持,就一定可以爬出纖細的大腿。爬樓梯的時候記得使用前腳掌著地,只需要讓前半個腳掌來踩地,後半個腳掌懸空即可,這樣能加強腿部鍛鍊、提升臀部。
  • 減肥爬樓梯好嗎 爬樓梯好處多多
    核心提示:減肥爬樓梯好嗎?爬樓梯能夠消耗4186千焦的熱量,可以讓呼吸和血液循環變快,從而促進新陳代謝,只要每日堅持,1年之後,會收穫非常不錯的瘦身效果。這種減肥減肥方法還可以改善我們體內的呼吸系統、心血管系統及骨骼肌肉系統功能,對身體有諸多益處。
  • LeetCode 每日一題(順帶吹水聊聊未來)
    2020-7-20 00:35:07寫完小冊,看到每日一題刷新了,【簡單】難度,那就順帶刷了,再順帶和小夥伴們吹吹水吧~題目 給定一個已按照升序排列 的有序數組,找到兩個數使得它們相加之和等於目標數。來源:力扣(LeetCode)連結:https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted著作權歸領扣網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
  • LeetCode-4-動態規劃
    連結:https://leetcode-cn.com/problems/climbing-stairs/假設你正在爬樓梯。題解一|動態規劃:此題類似於52題最大子序和,唯一的區別是:由於存在負數,那麼會導致最大的變最小的,最小的變最大的,因此還需要維護當前最小值minTmp,minTmp = min(minTmp * nums[i], nums[i])1、定義數組元素的含義dp[i]為以num[i]結尾的子段的最大子段乘積dp[1]為以num[1]
  • [每日一題]154. Find Minimum in Rotated Sorted Array II
    求一個遞增的數組的最小元素的非常簡單,就是第一個元素就行了。這是一道非常典型的 二分法 類型的題目。如果沒有 Tag 提醒,一般很難想到二分法。因為原數組不是單調遞增的,而是局部單調的。這道題能提升我們對二分法的應用範圍的理解:局部單調的情況下也是可以使用二分法的。
  • 【每日一題】leetcode刷題指南之Longest Consecutive Sequence
    最直觀的就是排序之後掃一遍,但這種方式時間複雜度為O(nlogn),明顯不符合要求。假設我們碰到一個數i,要求包含這個數的連續序列的長度我們會去向左找i-1、i-2、i-3…是否在數組中,再向右找i+1、i+2、i+3…是否在序列中,直到找到第一個不在數組中的為止,然後即可知道i所在序列的長度。
  • 字節大佬Leetcode刷題筆記,看完吊打問你算法的面試官
    介紹leetcode 題解,記錄自己的 leetcode 解題之路。目前分為五個部分:第一個部分是 leetcode 經典題目的解析,包括思路,關鍵點和具體的代碼實現。第四部分是每日一題,每日一題是在交流群(包括微信和 qq)裡進行的一種活動,大家一起 解一道題,這樣討論問題更加集中,會得到更多的反饋。而且 這些題目可以被記錄下來,日後會進行篩選添加到倉庫的題解模塊。
  • LeetCode刷題第三周【數組(簡單)】
    日期Oct.28 - Nov.03 2020(每日一題)Ps:本周我們接著上一周繼續刷數組,難度依舊是簡單,題目不再按順序,而是隨機挑選,下周開始會加深難度。隨著學校的開課,我會將平時上課的內容和筆記也整理成MK的格式上傳。
  • 為何一爬樓梯就腿酸?正確的爬樓梯方式,你做對了嗎?
    有些人走樓梯喜歡一股腦地走到頭,結果到了目標樓層後,腿就酸得很,好像要抽筋一樣。但有些人走樓梯卻是走一層就歇一小會兒。  因為在走樓梯的過程中,雙腿不斷地伸直,彎曲,同時肌肉也在不斷地運動。在運動的過程中產生了酸性物質——乳酸。當然,如果你進行一種運動而中間又不給肌肉放鬆的時間,那麼乳酸堆積的程度自然也會比較重,所以這就是為什麼那些一口氣上了好幾樓的人就會覺得更累,腿更酸。
  • 爬樓梯減肥的壞處有哪些 細數爬樓梯的好壞
    核心提示:爬樓梯減肥是現在一種流行的減肥方法,只要多爬一爬樓梯就能夠減肥,但是爬樓梯減肥法也是有壞處的,關於爬樓梯減肥法的壞處大家都知道嗎?不知道的讀者快快來閱讀正文呦!
  • 每日英語翻譯:爬樓梯使她上氣不接下氣的
    新東方網>英語>英語學習>口語>每日一句英語>正文每日英語翻譯:爬樓梯使她上氣不接下氣的 2013-01-31 14:46 來源:恆星英語 作者:
  • 邀請你加入算法每日一題組織!
    題目公布:打卡網站和小程序每天 0 點更新,交流群的群公告每天早晨 9 點鐘更新。刷題網站:力扣國服 leetcode-cn.com 或者 LeetCode 國際服  leetcode.com。 算法「每日一題」活動已經舉行了兩個月,以後也將長期舉辦,歡迎隨時加入!直接滑到文末有加入方式!為了更好地監督、學習、交流,我們創建了「每日一題」打卡網站、「算法每日一題」小程序、「每日一題」交流群、AlgoWiki 算法講解、以及本公眾號「每日算法題」。
  • 深航一「旅」陽光服務品牌推出爬樓梯輪椅服務
    圖: 爬樓梯輪椅(攝影師谷強)   民航資源網2019年4月19日消息:隨著民航業的發展,機場的體量也變得越來越龐大,旅客出行乘機往往要在機場內花費更多的時間和更長的路程,這對於行動不便
  • 爬樓梯可以減肥嗎 如何掌握正確方法
    核心提示:爬樓梯可以減肥嗎?爬樓梯是可以減肥的,可是我們一定要掌握正確的爬樓梯方法。上爬的時候,可以兩步一臺階,可以有效拉伸屁股和大腿後部肌肉;下樓梯時,可以一步一個臺階。
  • LeetCode刷題筆記 - 6. Z 字形變換
    學好算法很重要,然後要學好算法,大量的練習是必不可少的,LeetCode是我經常去的一個刷題網站,上面的題目非常詳細