309.最佳买卖股票时机含冷冻期
三个状态:
1. 当前持有股票状态1
2. 当前不持有股票,且不是今天卖出的股票状态2
3. 当前不持有股票, 且股票是今天卖出的状态3
文章来源:https://www.toymoban.com/news/detail-476415.html
- 题目要求前一天卖出了股票今天就不能买。所以今天持有股票
状态1
一定是昨天的状态2
在今天买了股票,或者就是保持了昨天的状态1
。状态1 = max(状态1, 状态2-今天的股票价格);
- 今天不持有股票且不是今天卖出的股票,即
状态2
。它一定是昨天不持有股票的状态,即状态2
或状态3
.状态2 = max(状态2, 状态3);
- 今天不持有股票且是今天卖出的股票,即
状态3
. 它一定是今天持有股票且今天卖出。状态3 = 状态1 + 今天的股票价格。
class Solution {
public:
int maxProfit(vector<int>& prices) {
vector<int> dp(3, 0);
dp[0] = -prices[0];
for(int i=1; i<prices.size(); i++)
{
dp[0] = max(dp[0], dp[1]-prices[i]);
dp[1] = max(dp[1], dp[2]);
dp[2] = dp[0]+prices[i];
}
return max(dp[1],dp[2]);
}
};
714.买卖股票的最佳时机含手续费
** 二个状态**文章来源地址https://www.toymoban.com/news/detail-476415.html
- 当前持有股票
dp[0]
- 当前不持有股票
dp[1]
-
状态1: 当前持有股票可能是保持了昨天持有股票的状态,或者是昨天不持有股票今天买了股票。
dp[0] = max(dp[0], dp[1]-prices[i]);
-
状态2: 当前不持有股票可能是保持了昨天不持有股票的状态,或者是今天持有股票然后我今天卖出去了股票。注意,卖股票要交手续费。
dp[1] = max(dp[1], dp[0] + prices[i]-fee);
class Solution {
public:
int maxProfit(vector<int>& prices, int fee) {
vector<int> dp(2, 0);
dp[0] = -prices[0];
for(int i=1; i<prices.size(); i++)
{
dp[0]= max(dp[0], dp[1]-prices[i]);
dp[1] = max(dp[1], dp[0]+prices[i]-fee);
}
return dp[1];
}
};
到了这里,关于【第51天| 309.最佳买卖股票时机含冷冻期 ● 714.买卖股票的最佳时机含手续费 】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!