【Day53】代碼隨想錄之動態規劃_買賣股票ⅠⅡ

文章目錄

      • 動態規劃理論基礎
        • 動規五部曲:
        • 出現結果不正確:
      • 1. 買賣股票的最佳時機
      • 2. 買賣股票的最佳時機Ⅱ

動態規劃理論基礎

動規五部曲:
  1. 確定dp數組 下標及dp[i] 的含義。
  2. 遞推公式:比如斐波那契數列 dp[i] = dp[i-1] + dp[i-2]。
  3. 初始化dp數組。
  4. 確定遍歷順序:從前到后or其他。
  5. 打印。
出現結果不正確:
  1. 打印dp日志和自己想的一樣:遞推公式、初始化或者遍歷順序出錯。
  2. 打印dp日志和自己想的不一樣:代碼實現細節出現問題。

1. 買賣股票的最佳時機

參考文檔:代碼隨想錄

分析:
買賣只有一次
dp五部曲:

  1. dp[i]含義:dp[i][0]表示持有i手里的現金,dp[i][1]表示不持有i手里的現金。
  2. 遞推公式:dp[i][0] = max(dp[i-1][0], 0 - prices[i]); dp[i][1] = max(dp[i-1][1], dp[i-1][0] + prices[i]);
  3. 初始化:dp[0][0] = -prices[0]; dp[0][1] = 0;
  4. 遍歷順序:從小到大。

代碼:

class Solution {
public:int maxProfit(vector<int>& prices) {//dp[i][0]:持有i股手里的錢//dp[i][1]:不持有i股手里的錢vector<vector<int>> dp(prices.size(), vector<int>(2,0));dp[0][0] = -prices[0];dp[0][1] = 0;for(int i = 1; i < prices.size(); i++){//第一次寫的是:dp[i][0] = max(dp[i-1][0], dp[i-1][1]-prices[i])//但是股票只能買一次,所以當前的持有是 前一個的持有 和 現在買一個 的最大值dp[i][0] = max(dp[i-1][0], -prices[i]);dp[i][1] = max(dp[i-1][1], dp[i-1][0]+prices[i]);}return max(dp[prices.size()-1][0], dp[prices.size()-1][1]);}
};

2. 買賣股票的最佳時機Ⅱ

參考文檔:代碼隨想錄

分析:
買賣次數是不限的,之前有用貪心做過,這次用動態規劃。
dp五部曲:

  1. dp[i]含義:dp[i][0]表示持有i手里的現金,dp[i][1]表示不持有i手里的現金。
  2. 遞推公式:dp[i][0] = max(dp[i-1][0], dp[i-1][1] - prices[i]); dp[i][1] = max(dp[i-1][1], dp[i-1][0] + prices[i]);
  3. 初始化:dp[0][0] = -prices[0]; dp[0][1] = 0;
  4. 遍歷順序:從小到大。

代碼:

class Solution {
public:int maxProfit(vector<int>& prices) {//dp[i][0]:i股持有手里的現金,i-1股也持有,i-1股不持有i股重新買入(設計多次買入和一次手中只有一股股票)//dp[i][1]:i股不持有手里的現金:i-1股也不持有,現金不變,i-1股持有i不持有賣出i-1買入i股vector<vector<int>> dp(prices.size(), vector<int>(2,0));dp[0][0] = -prices[0];dp[0][1] = 0;for(int i = 1; i < prices.size(); i++){dp[i][0] = max(dp[i-1][0], dp[i-1][1]-prices[i]);//i-1股持有,i股不持有,i股拋出,收益prices[i], dp[i-1][0]+prices[i]dp[i][1] = max(dp[i-1][1], dp[i-1][0]+prices[i]);}return max(dp[prices.size()-1][0], dp[prices.size()-1][1]);}
};

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

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

相關文章

學習git分支

學習git分支 [網頁練習](Learn Git Branching) 基礎篇 git commit Git 倉庫中的提交記錄保存的是你的目錄下所有文件的快照&#xff0c;就像是把整個目錄復制&#xff0c;然后再粘貼一樣&#xff0c;但比復制粘貼優雅許多&#xff01;Git 希望提交記錄盡可能地輕量&#xf…

【GStreamer】GstElement詳解:GStreamer 中最重要的對象

1、什么是元素GstElement? 每個解碼器、編碼器、解復用器、視頻或音頻輸出實際上都是一個GstElement。GstElement可以視為一個黑盒子:例如,對于解碼器元素,輸入為已編碼數據,輸出為解碼后的數據,解碼過程已由GstElement封裝好。 2、都有哪些元素GstElement? 2.1 源點…

概率基礎——幾何分布

概率基礎——幾何分布 介紹 在統計學中&#xff0c;幾何分布是描述了在一系列獨立同分布的伯努利試驗中&#xff0c;第一次成功所需的試驗次數的概率分布。在連續拋擲硬幣的試驗中&#xff0c;每次拋擲結果為正面向上的概率為 p p p&#xff0c;反面向上的概率為 1 ? p 1-p …

ZCC3221 輸入高耐壓 1A 線性鋰電池充電管理芯片(替代CE3221)

特性 :W 內置支持高壓輸入電流可調節的線性充電器&#xff1a; ■ 最高輸入 24V 耐壓&#xff0c;可承受高達 30V 的浪涌電壓 ■ 恒流下最大充電電流可達 1A&#xff0c;支持外部電阻實時配置充電電流 ■ 兼容 5VUSB 功率源和 AC 適配器&#xff0c;并提供熱插拔保護 ■…

GB/T 43565-2023 中小學合成材料面層籃球場地檢測

合成材料面層是指鋪裝在瀝青混凝土或水泥混凝土等基礎層上的高分子合成材料層&#xff0c;按照使用功能分為田徑產地&#xff0c;球類場地和其他活動場地&#xff0c;按照材料形態分為現澆型面層、預制型面層和人造草面層。 GB/T 43565-2023中小學合成材料面層籃球場地檢測項目…

python 驗證RSA密鑰生成加解密簽名驗簽算法實現

目錄 一、RSA加密、解密、簽名、驗簽(驗證簽名)&RSA算法原理 1、RSA加密、簽名區別: 2、對簽名和驗簽過程詳細理解: 2.1 簽名過程: 2.2 驗簽過程: 二、1024bit RSA Key生成 三、python 實現Public_key加密,Private_key解密 四、python 實現Private_Key簽名,使…

RM電控講義【HAL庫篇】

這段代碼中do while的作用&#xff1a; 宏定義中的語句塊&#xff1a;do { ... } while (0) 允許你在宏定義中創建一個語句塊&#xff0c;從而可以包含多條語句。這在宏定義中特別有用&#xff0c;因為宏只是簡單的文本替換&#xff0c;不像函數那樣有作用域和返回類型。因此&…

JBOSS EPA 7.X 接入Oracle數據源

獲取Oracle JDBC驅動程序&#xff1a; 訪問Oracle官方網站&#xff0c;下載適用于您的操作系統和Oracle數據庫版本的JDBC驅動程序文件&#xff08;通常為一個JAR文件&#xff09;。您可能需要一個Oracle賬戶來訪問這些文件。將下載的JAR文件保存到您的計算機上。 將驅動程序文件…

WordPress后臺自定義登錄和管理頁面插件Admin Customizer

WordPress默認的后臺登錄頁面和管理員&#xff0c;很多站長都想去掉或修改一些自己不喜歡的功能&#xff0c;比如登錄頁和管理頁的主題樣式、后臺左側菜單欄的某些菜單、儀表盤的一些功能、后臺頁眉頁腳某些小細節等等。這里boke112百科推薦這款可以讓我們輕松自定義后臺登錄頁…

2.20日學習打卡----初學Vue3

2.20日學習打卡 目錄: 2.20日學習打卡Vue是什么&#xff1f;安裝vue模板語法條件渲染列表渲染事件處理表單輸入綁定組件基礎Props組件交互自定義事件組件交互組件生命周期Vue引入第三方Axios網絡請求Axios網絡請求封裝網絡請求跨域解決方案路由配置路由傳遞參數嵌套路由配置Vue…

js設計模式:單例模式

作用: 保證一個類只有一個實例,并且提供一個全局的訪問位置。 可以用來實現全局的一些狀態管理或者獨一無二的數據 示例: class Wjt{constructor(name,idNumber,gender){this.name namethis.idNumber idNumberthis.gender gender}//可以直接使用Wjt調用的靜態方法static …

性能測試概述

1.性能測試介紹 好處: 有效的性能測試能給研發、運維團隊提供有效的容量規劃能力、系統風險識別、系統瓶頸識別、性能調優指導,保障盡量避免這些問題的發生。 例如: 假設:以下場景,不可用10分鐘,帶來的經濟損失 天貓雙十一峰值處理訂單58.3萬筆每秒 京東金融618戰報…

Linux Driver | 設備樹開發之初識設備樹

Linux Driver | 設備樹開發之初識設備樹 時間:2024年2月22日20:35:13 文章目錄 **Linux Driver** | 設備樹開發之初識設備樹參考1.設備樹開發2.`Linux`設備樹的由來3.`Linux`設備樹的由來-為什么會有設備樹4.設備樹的由來5.快速編譯設備樹---**DTC** (`device tree compiler`)…

C#,入門教程(29)——修飾詞靜態(static)的用法詳解

上一篇&#xff1a; C#&#xff0c;入門教程(28)——文件夾&#xff08;目錄&#xff09;、文件讀&#xff08;Read&#xff09;與寫&#xff08;Write&#xff09;的基礎知識https://blog.csdn.net/beijinghorn/article/details/124231282 static 是編程高頻詞之一。 讀了一…

2.21號qt

1.QMainWindow中常用的類 繼承于QMainWindow類&#xff0c;原因該類提供了QWidget沒有提供的成員函數。 菜單欄、工具欄、狀態欄、浮動窗口&#xff08;鉚接部件&#xff09;、核心部件 1.1 菜單欄 QMenuBar //創建菜單欄 QMenuBar 最多只能有一個 QMenuBar *mbar menu…

Hutool簡介和常用類

Hutool簡介 Hutool是一個小而全的Java工具類庫&#xff0c;通過靜態方法封裝&#xff0c;降低相關API的學習成本&#xff0c;提高工作效率&#xff0c;使Java擁有函數式語言般的優雅&#xff0c;讓Java語言也可以“甜甜的”。 Hutool中的工具方法來自每個用戶的精雕細琢&…

【鴻蒙 HarmonyOS 4.0】數據持久化

一、數據持久化介紹 數據持久化是將內存數據(內存是臨時的存儲空間)&#xff0c;通過文件或數據庫的形式保存在設備中。 HarmonyOS提供兩種數據持久化方案&#xff1a; 1.1、用戶首選項&#xff08;Preferences&#xff09;&#xff1a; 通常用于保存應用的配置信息。數據通…

android 全局異常處理封裝

app出現了問題&#xff0c;尤其是多線程問題&#xff0c;某個線程出了問題&#xff0c;很不好找&#xff0c;那是不是可以搞一個統一的處理類&#xff0c;將所有的異常信息都統一到一個地方呢&#xff0c;原本只是一個知識點&#xff0c;但我發現這里還可以 保存異常信息到本地…

Vue 進階系列丨實現簡易reactive和ref

Vue 進階系列教程將在本號持續發布&#xff0c;一起查漏補缺學個痛快&#xff01;若您有遇到其它相關問題&#xff0c;非常歡迎在評論中留言討論&#xff0c;達到幫助更多人的目的。若感本文對您有所幫助請點個贊吧&#xff01; 2013年7月28日&#xff0c;尤雨溪第一次在 GItHu…

計算機網絡Day02--物理層(一)

計算機網絡Day02–物理層 物理層基本概念 物理層考慮的是怎么才能在連接各種計算機的傳輸媒體上傳輸比特流&#xff0c;而不是具體的傳輸媒體 作用&#xff1a;盡可能屏蔽掉不同傳輸媒體和通信手段的差異 用于物流層的協議也稱為物流層規程 主要作用&#xff1a;解決計算機…