买卖股票的最佳时机含手续费
生活随笔
收集整理的這篇文章主要介紹了
买卖股票的最佳时机含手续费
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
相對于動態(tài)規(guī)劃:122.買賣股票的最佳時機II,本題只需要在計算賣出操作的時候減去手續(xù)費就可以了,代碼幾乎是一樣的。
唯一差別在于遞推公式部分
dp[i][0] 表示第i天持有股票所省最多現(xiàn)金。
dp[i][1] 表示第i天不持有股票所得最多現(xiàn)金
如果第i天持有股票即dp[i][0], 那么可以由兩個狀態(tài)推出來
- 第i-1天就持有股票,那么就保持現(xiàn)狀,所得現(xiàn)金就是昨天持有股票的所得現(xiàn)金 即:dp[i - 1][0]
- 第i天買入股票,所得現(xiàn)金就是昨天不持有股票的所得現(xiàn)金減去 今天的股票價格 即:dp[i - 1][1] - prices[i]
所以:dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - prices[i]);
如果第i天不持有股票即dp[i][1]的情況, 依然可以由兩個狀態(tài)推出來
- 第i-1天就不持有股票,那么就保持現(xiàn)狀,所得現(xiàn)金就是昨天不持有股票的所得現(xiàn)金 即:dp[i - 1][1]
- 第i天賣出股票,所得現(xiàn)金就是按照今天股票價格賣出后所得現(xiàn)金,注意這里需要有手續(xù)費了即:dp[i - 1][0] + prices[i] - fee
所以:dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i] - fee);
class Solution { public:int maxProfit(vector<int>& prices, int fee) {vector<vector<int>> dp(prices.size(),vector<int>(2));dp[0][0]=-prices[0];dp[0][1]=0;for(int ii=1;ii<prices.size();ii++){ dp[ii][0]=max(dp[ii-1][0],dp[ii-1][1]-prices[ii]);dp[ii][1]=max(dp[ii-1][1],dp[ii-1][0]+prices[ii]-fee);}return max(dp[prices.size()-1][1],dp[prices.size()-1][0]);} };- 時間復雜度:O(n)
- 空間復雜度:O(n)
總結
以上是生活随笔為你收集整理的买卖股票的最佳时机含手续费的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最佳买卖股票时机含冷冻期
- 下一篇: TCP连接中的异常情况