题目:
在我上次的笔记50中,有股票问题的统一解(动态规划方式)
即把每天手上是否有股票看作两个状态,用二维数组记录交易次数和利润。把上次的代码k改成2也可以过,就是效率有点低。毕竟这道题限定了你只能交易两次。
那么我们就把状态拆分开,分为
于是就有了官方题解的答案:
class Solution {
public:
int maxProfit(vector<int>& prices) {
int n = prices.size();
int buy1 = -prices[0], sell1 = 0;
int buy2 = -prices[0], sell2 = 0;
for (int i = 1; i < n; ++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;
}
};
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-iii/solution/mai-mai-gu-piao-de-zui-jia-shi-ji-iii-by-wrnt/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
个人建议复习之前的买卖股票Ⅳ,那里的解法更为全面一点。