leetcode309. 最佳买卖股票时机含冷冻期
生活随笔
收集整理的這篇文章主要介紹了
leetcode309. 最佳买卖股票时机含冷冻期
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一:題目
二:上碼
class Solution { public:/**思路:1.分析題意那么我們會有四種狀態0 買入股票(或者說是之前就買入了股票但是也一直沒有操作)1 賣出股票的狀態一 兩天前就賣出了股票 但是一直沒有操作 2 賣出股票狀態二 今天賣出股票3 冷凍期 持續一天2.動態規劃1>:確定dp數組的含義以及下標的含義dp[i][j] 表示的是第i天在[0,3]中的某種狀態下 我我們剩下的錢2>:確定dp數組狀態遞推公式dp[i][0]有兩種狀態 前一天是買入的狀態 那么今天就是不買入的; 今天買入了,但是我們有兩種狀態 前一天是冷凍期 或則是賣出的狀態不買入的狀態dp[i][0] = dp[i-1][0];//不買入的話j的狀態可以一致 即連續兩天狀態一致 買入的狀態有兩種- 前一天是冷凍期: dp[i][0] = dp[i-1][3] - prices[i];- 前一天是賣出的狀態 dp[i][0] = dp[i-1][1] - prices[i];dp[i][0] = max(dp[i-1][0],max(dp[i-1][3]-prices[i],dp[i-1][1] - prices[i]));dp[i][1] 有兩種操作操作一:前一天就是狀態二操作二:前一天是冷凍期dp[i][1] = max(dp[i-1][1],dp[i-1][3]);今天賣出了股票dp[i][2] = dp[i-1][1] + prices[i];今天是冷凍期(昨天賣出了股票 )dp[i][3] = dp[i-1][2]3>:確定dp數組的初始化dp[0][0] = -prices[i];4>:確定dp數組中的遍歷順序正序5>:舉例驗證**/int maxProfit(vector<int>& prices) {vector<vector<int> >dp(prices.size(),vector<int>(4,0));dp[0][0] = -prices[0];for (int i = 1; i < prices.size(); i++) {//天數dp[i][0] = max(dp[i-1][0],max(dp[i-1][3]-prices[i],dp[i-1][1] - prices[i]));dp[i][1] = max(dp[i-1][1],dp[i-1][3]);dp[i][2] = dp[i-1][0] + prices[i];dp[i][3] = dp[i-1][2];} return max(dp[prices.size() - 1][3],max(dp[prices.size() - 1][1], dp[prices.size() - 1][2]));} };
安!
總結
以上是生活随笔為你收集整理的leetcode309. 最佳买卖股票时机含冷冻期的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leetcoed123. 买卖股票的最佳
- 下一篇: 腋窝淋巴结是怎么回事