1.3 斐波那契數列模型:LeetCode 746. 使用最小花費爬樓梯


動態規劃解最小花費爬樓梯問題:LeetCode 746. 使用最小花費爬樓梯


1. 題目鏈接

LeetCode 746. 使用最小花費爬樓梯
題目要求:給定一個整數數組 cost,其中 cost[i] 是從樓梯第 i 階向上爬所需支付的費用。你可以從下標 01 的臺階開始爬,每次爬1或2階,計算達到樓梯頂部(數組末尾之后)的最小花費。


2. 題目描述
  • 輸入:整數數組 cost,例如 [10, 15, 20]
  • 輸出:最小花費,例如 15(從下標1開始,直接走兩步到達頂部)。
  • 約束條件
    • 2 ≤ cost.length ≤ 1000
    • 0 ≤ cost[i] ≤ 999

3. 示例分析

示例 1
輸入:cost = [10, 15, 20]
輸出:15
解釋

  • 從下標1開始,支付15,走兩步直接到達頂部,總花費為15。

示例 2
輸入:cost = [1, 100, 1, 1, 1, 100, 1, 1, 100, 1]
輸出:6
解釋

  • 路徑為 0→2→4→6→7→9→頂部,總花費為 1+1+1+1+1+1=6

4. 算法思路
動態規劃遞推
  1. 狀態定義

    • dp[i] 表示到達第 i 階的最小累計花費。
    • 注意:頂部位于第 n 階(n = cost.size()),因此需要計算 dp[n]
  2. 狀態轉移方程

    • 到達第 i 階的最小花費由前兩階的花費決定:
      dp[i] = min(dp[i-1] + cost[i-1], dp[i-2] + cost[i-2])
    • 解釋:可以從第 i-1 階走1步,或從第 i-2 階走2步到達第 i 階。
  3. 初始條件

    • dp[0] = 0(從起點開始,無需站在下標0的臺階)。
    • dp[1] = 0(從起點開始,直接選擇下標1的臺階,無需支付下標1的費用)。

5. 邊界條件與注意事項
  1. 邊界處理

    • cost 數組長度為 1 時,直接返回 0(無需支付任何費用即可到達頂部)。
    • 當長度為 2 時,返回 min(cost[0], cost[1])
  2. 時間復雜度O(n),只需遍歷一次數組。

  3. 空間優化:可進一步優化為滾動變量,將空間復雜度從 O(n) 降至 O(1)


6. 代碼實現與解析
class Solution {
public:int minCostClimbingStairs(vector<int>& cost) {int n = cost.size();if (n == 0) return 0;    // 處理空數組(題目約束n≥2,實際無需)if (n == 1) return 0;     // 關鍵修正:避免越界vector<int> dp(n + 1, 0); // dp[i]表示到達第i階的最小花費for (int i = 2; i <= n; i++) {dp[i] = min(dp[i-1] + cost[i-1], dp[i-2] + cost[i-2]);}return dp[n];}
};
代碼解析
  1. 初始化處理
    • 直接處理 n=0n=1 的情況,避免越界錯誤。
  2. 動態規劃數組
    • dp[0]dp[1] 初始化為 0,因為從起點可以選擇直接站在下標0或1的位置。
  3. 遞推計算
    • i=2 開始,計算到達每階的最小花費,確保每次取最小值。
  4. 返回值
    • dp[n] 表示到達頂部(第 n 階之后)的最小花費。

總結

通過動態規劃遞推能夠高效解決最小花費爬樓梯問題。關鍵點在于正確處理邊界條件(如 n=1)和狀態轉移邏輯。此方法可擴展至類似路徑選擇問題,如帶權重的跳躍游戲等。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/73991.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/73991.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/73991.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

游戲開發中的貝塞爾曲線:感受絲滑的數學之美

這是一篇vip文章,如果你還不是vip,可以移步https://www.ilikexff.cn/articles/165免費閱讀。 介紹 貝塞爾曲線是計算機圖形學中最重要的概念之一,以其在表示曲線時的靈活性和精確性而聞名。廣泛應用于計算機圖形學、動畫、路徑規劃等領域的數學曲線。 貝塞爾曲線的數學原理基…

強化學習課程:stanford_cs234 學習筆記(2)introduction to RL

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言5、強化學習課程大綱5.1 課程內容主&#xff1a;5.2 馬爾可夫決策過程&#xff1a;5.2.1 馬爾可夫性 markov propterty5.2.2 馬爾可夫過程 markov process5.2.3…

第 26 場 藍橋月賽 部分題解

第 26 場 藍橋月賽 2.燈籠猜謎3.元宵分配4.擺放湯圓5.元宵交友&#xff08;運行超時 通過90%&#xff09; 2.燈籠猜謎 分析&#xff1a;以當前位置為視角&#xff0c;要想移動的距離盡可能的少&#xff0c;按順序猜謎語&#xff0c;給你一個區間&#xff0c;有三種情況&#xf…

JAVA實戰開源項目:體育館使用預約平臺(Vue+SpringBoot) 附源碼

本文項目編號 T 144 &#xff0c;文末自助獲取源碼 \color{red}{T144&#xff0c;文末自助獲取源碼} T144&#xff0c;文末自助獲取源碼 目錄 一、系統介紹二、數據庫設計三、配套教程3.1 啟動教程3.2 講解視頻3.3 二次開發教程 四、功能截圖五、文案資料5.1 選題背景5.2 國內…

解決【vite-plugin-top-level-await】 插件導致的 Bindings Not Found 錯誤

解決【vite-plugin-top-level-await】 插件導致的 Bindings Not Found 錯誤 環境設置 操作系統: macOS硬件平臺: M1 Pro前端框架: Vue 3Node.js 版本: 20 在使用 Vue 項目時&#xff0c;我們嘗試集成 vite-plugin-top-level-await 插件以支持頂層 await 語法。然而&#xff…

推薦系統(十九):優勢特征蒸餾(Privileged Features Distillation)在商品推薦中的應用(二)

在上一篇文章《推薦系統(十八):優勢特征蒸餾(Privileged Features Distillation)在商品推薦中的應用》中,筆者實現了一個基于 PFD 思想的 Demo。其中,Teacher 模型和 Student 模型都是簡單的單任務(CTR)模型,在本節,筆者將基于 PFD 思想實現一個多任務模型:其中,Tea…

深度學習之卷積

從全連接到卷積 MLP的缺陷&#xff0c;假設有如下的場景&#xff1a; 分類貓和狗的圖片 使用一個還不錯的相機采集圖片&#xff08;12M像素)RGB圖片有 36M元素使用100大小的單隱藏層MLP&#xff0c;模型有 3.6B元素 遠多于世界上所有貓和狗總數(900M狗&#xff0c;600M貓) …

目標識別與雙目測距(1)環境搭建:Ubuntu+yolov5+pcl庫

環境情況 ubuntu 18.04 → 20.04&#xff08;最終&#xff09; 安裝Ubuntu1804虛擬機系統 Anaconda&#xff1a;可參考我的另一篇文章 Python 3.6.13 → 3.8&#xff08;最終&#xff09;Anaconda3-2021.05 目標識別&#xff1a;YOLOv5相關 1、安裝git sudo apt install gi…

LinuxTCP/UDP基礎概念

TCP&#xff08;傳輸控制協議&#xff09; TCP 是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。它的主要特點包括&#xff1a; 面向連接&#xff1a;在傳輸數據之前&#xff0c;需要通過“三次握手”建立連接&#xff1b;傳輸結束后&#xff0c;通過“四次揮手”斷開…

MP3、WAV、RM、PNG格式

MP3、WAV、RM、PNG格式 MP3 是一種音頻壓縮格式,采用了 MPEG-1 Audio Layer 3 或 MPEG-2 Audio Layer 3 編碼標準.MP3 格式能夠以較小的文件大小存儲高質量的音頻,可在多種設備如手機、MP3 播放器、電腦上播放,是目前應用最廣泛的音頻格式之一. MPEG-1 是MPEG(Moving Pictu…

力扣hot100:滑動窗口——找到字符串中所有字母異位詞

題目鏈接&#xff1a;找到字符串中所有字母異位詞 考慮用滑動窗口&#xff0c;窗口大小固定為字符串p的長度&#xff0c;用一個for循環控制子串的結束位置。 怎么判斷是字母異位詞&#xff1f; 1、排序&#xff1a;字符串中所有符合條件的字母異位詞與目標串p在經過排序后是…

人工智能通識速覽一(神經網絡)(編輯中)

上篇&#xff1a;人工智能通識速覽一&#xff08;機器學習&#xff09; 人工智能通識速覽一&#xff08;機器學習&#xff09;&#xff08;編輯中&#xff09;-CSDN博客https://blog.csdn.net/siper12138/article/details/146512068?sharetypeblogdetail&sharerId1465120…

【數據標準】數據標準化框架體系-基礎類數據標準

導讀&#xff1a;數據標準化的四大基礎類標準&#xff08;業務術語、業務規則、命名規范、代碼標準&#xff09;是企業數據治理的核心支柱。主要作用體現在?消除業務與技術間的語義鴻溝?&#xff08;通過統一術語與命名規范&#xff09;&#xff0c;?保障數據全生命周期的質…

可發1區的超級創新思路(python\matlab實現):MPTS+Lconv+注意力集成機制的Transformer時間序列模型

首先聲明,該模型為原創!原創!原創!且該思路還未有成果發表,感興趣的小伙伴可以借鑒! 應用場景 該模型主要用于時間序列數據預測問題,包含功率預測、電池壽命預測、電機故障檢測等等。 一、模型整體架構(本文以光伏功率預測為例) 本模型由多尺度特征提取模塊(MPTS)…

深入解析C#中的解釋器模式:原理與應用

解釋器模式&#xff08;Interpreter Pattern&#xff09;是一種行為型設計模式&#xff0c;旨在為特定的語言提供解釋和執行的能力。該模式將語言的文法規則封裝在類中&#xff0c;使得能夠靈活、動態地對這些規則進行解釋。在實際開發中&#xff0c;尤其是處理一些定制的表達式…

LeetCode知識點整理

1、Scanner 輸入&#xff1a; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);// 讀取整數int num scanner.nextInt();// 讀取一行字符串String line scanner.nextLine();scanner.close();…

紅寶書第二十一講:詳解JavaScript的模塊化(CommonJS與ES Modules)

紅寶書第二十一講&#xff1a;詳解JavaScript的模塊化&#xff08;CommonJS與ES Modules&#xff09; 資料取自《JavaScript高級程序設計&#xff08;第5版&#xff09;》。 查看總目錄&#xff1a;紅寶書學習大綱 一、模塊化的意義&#xff1a;分而治之 模塊化解決代碼依賴混…

Android Product Flavors 深度解析與最佳實踐:構建多版本應用的全方位指南

1. 高效配置模板 1.1 現代化多維度配置 (Kotlin DSL) android {flavorDimensions listOf("version", "market", "environment")productFlavors {register("free") {dimension "version"applicationIdSuffix ".free…

QListView開發入門

1. QListView 基礎介紹 QListView 是 Qt 框架中用于顯示項目列表的控件&#xff0c;屬于模型/視圖架構的一部分。它提供了一種靈活的方式來顯示和操作項目列表。 主要特點&#xff1a; 基于模型/視圖架構 支持多種視圖模式&#xff08;列表、圖標&#xff09; 內置選擇、編…

Cookie可以存哪些指?

Cookie是一種小型文本文件&#xff0c;通常由服務器生成并發送到用戶瀏覽器中保存。它可以用于存儲一些簡單但非常有用的信息&#xff0c;以便于后續請求時自動附帶回服務器使用。下面是Cookie能夠存儲的一些典型內容類別及用途說明&#xff1a; 會話標識符(Session ID) 這是最…