題干:
代碼:
class Solution {
public:int maxProfit(vector<int>& prices) {if (prices.size() < 2) return 0;int buy1 = prices[0];int buy2 = prices[0];int sell1 = 0, sell2 = 0;for (int i = 1; i < prices.size(); ++i) {buy1 = min(buy1, prices[i]);sell1 = max(sell1, prices[i] - buy1);buy2 = min(buy2, prices[i] - sell1);sell2 = max(sell2, prices[i] - buy2);}return sell2;}
};
buy1
和buy2
分別存儲了第一筆交易的買入價格和第二筆交易的買入價格(即賣出第一筆股票后的價格)。sell1
和sell2
則分別代表了第一筆交易和第二筆交易的賣出價格。
我們遍歷價格數組,不斷更新這四個值:如果當前價格小于buy1
,那么更新buy1
;如果當前價格減去buy1
大于sell1
,那么更新sell1(第一次賣出最大利潤)
;更新buy2為當前價格減去sell1和之前的buy2中的較小值,表示在當前價格下第二次買入股票時的最低花費, 通過不斷更新 buy2
,我們可以確保在第二次買入時不會支付比第一次賣出后更高的價格,從而避免虧損;如果當前價格減去buy2
大于sell2
,那么更新sell2
。
最后,sell2
就是我們想要的結果:兩次交易所能獲得的最大利潤。