代碼隨想錄算法訓練營Day50 | 123.買賣股票的最佳時機 III、188.買賣股票的最佳時機 IV

123.買賣股票的最佳時機 III

思路與 121.買賣股票I 一脈相承,一次買賣有2種狀態(持有/不持有),那么兩次買賣就有4種狀態(第一次持有/不持有、第二次持有/不持有)

1、DP數組定義

????????dp[i][j]為當前利潤,買入則減,賣出則加。j 取值范圍[0, 4],分別表示第一次持有,第一次不持有,第二次持有,第二次不持有

????????· 持有:今天或前幾天完成了買入,當前手頭持有股票
?? ?????· 不持有:今天或前幾天完成了賣出,當前手頭不持有股票

2、DP數組初始化:dp[0][0]初始化為-prices[0],其余元素都初始化為最小值,表示還沒進行該操作

3、遞推公式

? ? ? ? · dp[i][0]:判斷當日買入和前幾日買入,哪個更便宜,買入的起步資金為0:

????????????????????????dp[i][0] = max(dp[i - 1][0], -prices[i])

? ? ? ? · dp[i][1]:在第一次持有的基礎上判斷是否進行第一次賣出:

????????????????????????dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i])

? ? ? ? · dp[i][2]:第二次買入的起步資金是第一次賣出所得的金額(即dp[i - 1][1]):

????????????????????????dp[i][2] = max(dp[i - 1][2], dp[i - 1][1] - prices[i])

????????· dp[i][1]:在第二次持有的基礎上判斷是否進行第二次賣出:

????????????????????????dp[i][3] = max(dp[i - 1][3], dp[i - 1][2] + prices[i])

4、遍歷順序:按時間順序從前向后遍歷

int maxProfit(vector<int>& prices) {// dp[i][j],j為[0, 4],分別表示第一次持有,第一次不持有,第二次持有,第二次不持有// 除了dp[0][0]外其他都初始化為最小值,表示還沒進行該操作vector<vector<int>> dp(prices.size(), vector<int>(4, -100001));dp[0][0] = -prices[0];for (int i = 1; i < prices.size(); ++i) {// 第一次買賣操作dp[i][0] = std::max(dp[i - 1][0], -prices[i]);dp[i][1] = std::max(dp[i - 1][1], dp[i - 1][0] + prices[i]);// 第二次買賣操作dp[i][2] = std::max(dp[i - 1][2], dp[i - 1][1] - prices[i]);dp[i][3] = std::max(dp[i - 1][3], dp[i - 1][2] + prices[i]);}// 可以選擇 一次買賣都不進行、只進行一次買賣、進行兩次買賣return std::max(0, std::max(dp[prices.size() - 1][1], dp[prices.size() - 1][3]));
}

188.買賣股票的最佳時機 IV

和上題幾乎完全一致,把2改為k,新增一個遍歷k的循環即可

· 第 j 次持有的下標為 2 * j ,第 j 次不持有的下標為 2 * j + 1

· 第 j 次持有需要在第 j - 1 次不持有的基礎上進行

· 第 j 次不持有需要在第 j 次持有的基礎上進行

int maxProfit(int k, vector<int>& prices) {vector<vector<int>> dp(prices.size(), vector<int>(2 * k, -1001));dp[0][0] = -prices[0];for (int i = 1; i < prices.size(); ++i) {dp[i][0] = std::max(dp[i - 1][0], -prices[i]);dp[i][1] = std::max(dp[i - 1][1], dp[i - 1][0] + prices[i]);for (int j = 1; j < k; ++j) {dp[i][2 * j] = std::max(dp[i - 1][2 * j], dp[i - 1][2 * j - 1] - prices[i]);dp[i][2 * j + 1] = std::max(dp[i - 1][2 * j + 1], dp[i - 1][2 * j] + prices[i]);}}int ans = 0;for (int i = 0; i < k; ++i)ans = std::max(ans, dp[prices.size() - 1][2 * i + 1]);return ans;
}

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

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

相關文章

【Java】Base理論的核心思想和理論三要素

目錄 簡介 BASE 理論的核心思想 BASE 理論三要素 1. 基本可用 2. 軟狀態 3. 最終一致性 總結 簡介 BASE 是 Basically Available&#xff08;基本可用&#xff09; 、Soft-state&#xff08;軟狀態&#xff09; 和 Eventually Consistent&#xff08;最終一致性&#xf…

深度強化學習系列【2】- 貝爾曼方程和馬爾可夫決策過程

引言: 一直想做點強化學習相關的內容,但是對于其原理一直不是太明了,相比于編程實現,懂得算法部分的機理與理論也是至關重要的。網上找的一些資料都在強調貝爾曼方程和馬爾可夫決策過程在強化學習中的作用,但是介紹都不夠充分。 另外,在知乎【1】上看到一個說法,說 強化學…

財報解讀:基本盤穩定后,聯想如何進一步搶占AI時代?

從2021年下半年開始&#xff0c;受諸多因素影響&#xff0c;消費電子行業始終處在承壓狀態&#xff0c;“不景氣”這一關鍵詞屢次被市場提及。 但寒氣沒有持續&#xff0c;可以看到&#xff0c;消費電子行業正在逐漸回暖。國金證券在今年1月的研報中就指出&#xff0c;從多方面…

【簡單模擬】第十一屆藍橋杯省賽第二場C++ B組 / C組《成績統計》(c++)

1.題目說明 小藍給學生們組織了一場考試&#xff0c;卷面總分為100 分&#xff0c;每個學生的得分都是一個 0 到 100 的整數。 如果得分至少是 60 分&#xff0c;則稱為及格。 如果得分至少為 85 分&#xff0c;則稱為優秀。 請計算及格率和優秀率&#xff0c;用百分數表示…

#WEB前端(CCS常用屬性,補充span、div)

1.實驗&#xff1a; 復合元素、行內元素、塊內元素、行內塊元素 2.IDE&#xff1a;VSCODE 3.記錄&#xff1a; span為行內元素&#xff1a;不可設置寬高&#xff0c;實際占用控件決定分布空間。 div為塊內元素&#xff1a;占滿整行&#xff0c;可以設置寬高 img為行內塊元…

Unity(第二十三部)導航

你可以使用 unity官方提供的 unity導航組件或第三方 unity導航組件&#xff0c;以實現游戲中角色或其他物體的導航。 unity導航組件通常具有多種導航模式&#xff0c;如飛行模式、步行模式、車輛模式等&#xff0c;可以根據不同的需求選擇合適的模式。同時&#xff0c;unity導…

2023年全國職業院校技能大賽中職組大數據應用與服務賽項題庫參考答案陸續更新中,敬請期待…

2023年全國職業院校技能大賽中職組大數據應用與服務賽項題庫參考答案陸續更新中&#xff0c;敬請期待… 武漢唯眾智創科技有限公司 2024 年 2 月 聯系人&#xff1a;辜渝儐13037102709 題號&#xff1a;試題01 模塊二&#xff1a;數據獲取與處理 &#xff08;一&#xff09;…

Ainx的全局配置

&#x1f4d5;作者簡介&#xff1a; 過去日記&#xff0c;致力于Java、GoLang,Rust等多種編程語言&#xff0c;熱愛技術&#xff0c;喜歡游戲的博主。 &#x1f4d7;本文收錄于Ainx系列&#xff0c;大家有興趣的可以看一看 &#x1f4d8;相關專欄Rust初階教程、go語言基礎系列…

js中的閉包

理解 函數內部可以訪問其外函數中的作用域 作用 創建私有變量延長變量的聲明周期一般函數中的變量在函數返回之后就會被銷毀,但是閉包會保存使用的變量,即便是上下文被摧毀了,使用的變量依舊存在 閉包的用途 柯里化函數的目的就是在避免重復的調用變量案例 求一個長方形的…

ROS2 Python環境變量PYTHONPATH設置

文章目錄 引題解決方法方法一 將三方庫與pkg放在一起方法二 將三方庫放入pythonpath目錄 引題 ROS2在執行ros2 pkg create --build-type ament_python **創建python包時&#xff0c;有時候會涉及外部庫的導入&#xff0c;這里講解一下如何配置PYTHONPATH變量讓程序順利找到外部…

【S32DS報錯】-7-程序進入HardFault_Handler,無法正常運行

【S32K3_MCAL從入門到精通】合集&#xff1a; S32K3_MCAL從入門到精通https://blog.csdn.net/qfmzhu/category_12519033.html 問題背景&#xff1a; 在S32DS IDE中使用PEmicro&#xff08;Multilink ACP&#xff0c;Multilink Universal&#xff0c;Multilink FX&#xff09…

【網站項目】182在線作業管理系統

&#x1f64a;作者簡介&#xff1a;擁有多年開發工作經驗&#xff0c;分享技術代碼幫助學生學習&#xff0c;獨立完成自己的項目或者畢業設計。 代碼可以私聊博主獲取。&#x1f339;贈送計算機畢業設計600個選題excel文件&#xff0c;幫助大學選題。贈送開題報告模板&#xff…

程序員職業迷宮:選擇你的道路,開啟技術之旅

在這個數字化飛速發展的時代&#xff0c;程序員已經成為了一個備受矚目的職業。他們就像是現代社會中的魔法師&#xff0c;用代碼搭建起一個又一個令人驚嘆的數字世界。然而&#xff0c;對于許多初入行的程序員來說&#xff0c;面對前端的花園、后端的洞穴、數據科學的密室&…

【Python】進階學習:pandas--describe()函數的使用介紹

&#x1f40d;【Python】進階學習&#xff1a;pandas——describe()函數的使用介紹 &#x1f308; 個人主頁&#xff1a;高斯小哥 &#x1f525; 高質量專欄&#xff1a;Matplotlib之旅&#xff1a;零基礎精通數據可視化、Python基礎【高質量合集】、PyTorch零基礎入門教程&am…

繪圖機器 - 華為OD統一考試(C卷)

OD統一考試&#xff08;C卷&#xff09; 分值&#xff1a; 100分 題解&#xff1a; Java / Python / C 題目描述 繪圖機器的繪圖筆初始位置在原點&#xff08;0, 0&#xff09;&#xff0c;機器啟動后其繪圖筆按下面規則繪制直線&#xff1a; 1&#xff09;嘗試沿著橫向坐標軸…

小程序海報生成海報【vue】

文章目錄 1、創建海報的基本邏輯2、用canvas繪制文字3、繪制矩形4、繪制圓形5、繪制圓角矩形6、繪制圖片7、執行繪制8、完整的代碼 1、創建海報的基本邏輯 1、先創建dom元素 wrapperHeight是根據海報的內容計算出來海報的高度 <view class"preview-card-wrap" ta…

支持向量機 SVM | 線性可分:硬間隔模型公式推導

目錄 一. SVM的優越性二. SVM算法推導小節概念 在開始講述SVM算法之前&#xff0c;我們先來看一段定義&#xff1a; 支持向量機(Support VecorMachine, SVM)本身是一個二元分類算法&#xff0c;支持線性分類和非線性分類的分類應用&#xff0c;同時通過OvR或者OvO的方式可以應用…

長貴對趙本山說:你需要我們家大腳,我立馬給你配雙大鞋!

長貴對趙本山說&#xff1a;你需要我們家大腳&#xff0c;我立馬給你配雙大鞋&#xff01; --小品《鄉村愛情》&#xff08;中2&#xff09;的臺詞 表演者&#xff1a;趙本山 于月仙 王小利 唐鑒軍等 &#xff08;接上&#xff09; 哈哈哈 伊拉克啊 這地方也不產這玩意吧 …

Chat GPT:AI聊天機器人的革命性突破!

一、引言 近年來&#xff0c;人工智能&#xff08;AI&#xff09;技術的發展日新月異&#xff0c;其中最具代表性的成果之一便是Chat GPT。這款基于自然語言處理&#xff08;NLP&#xff09;技術的聊天機器人&#xff0c;以其高度智能、靈活多變的特點&#xff0c;迅速吸引了全…

筆記74:在SLAM建圖過程中,為什么要使用【障礙物點云配準算法】和【里程計估算算法】結合的方法

僅使用【障礙物點云配準算法】&#xff0c;很容易導致在一條長通道中&#xff0c;因為前后兩幀的雷達點云圖過于相似&#xff0c;導致特征匹配一直完全重合&#xff0c;使得機器人建圖一直停留在原地&#xff0c;但實體機器人早就沿著通道跑向遠端了&#xff1b; 使用Hector_ma…