买卖股票的最佳时机 III——允许完成两次交易 c++
时间: 2023-07-30 17:12:55 浏览: 87
好的,这是一个关于动态规划的问题,可以使用DP来解决。具体思路如下:
1. 首先,我们需要定义状态。在这里,我们可以使用四个变量来表示我们的状态:
buy1:第一次买入股票后剩下的最大现金
sell1:第一次卖出股票后剩下的最大现金
buy2:第二次买入股票后剩下的最大现金
sell2:第二次卖出股票后剩下的最大现金
2. 然后,我们需要定义状态转移方程。我们可以使用以下方程来更新状态:
buy1 = max(buy1, -prices[i]);
sell1 = max(sell1, buy1 + prices[i]);
buy2 = max(buy2, sell1 - prices[i]);
sell2 = max(sell2, buy2 + prices[i]);
3. 最后,我们需要返回sell2,即第二次卖出股票后剩下的最大现金。
下面是完整的C++代码实现:
```c++
class Solution {
public:
int maxProfit(vector<int>& prices) {
int buy1 = INT_MIN, sell1 = 0, buy2 = INT_MIN, sell2 = 0;
for (int i = 0; i < prices.size(); i++) {
buy1 = max(buy1, -prices[i]);
sell1 = max(sell1, buy1 + prices[i]);
buy2 = max(buy2, sell1 - prices[i]);
sell2 = max(sell2, buy2 + prices[i]);
}
return sell2;
}
};
```
阅读全文