123. Best Time to Buy and Sell Stock III
1.問題
你擁有一個代表每天股票價格的list, 最多有兩次交易, 計算出最高的獲利價格

2.想法
提問
確認題意:
function header, parameter
test input
觀察
說明想法
對某天來說的最大獲利是在該天賣掉, 當天再次買進
區域最高獲利 (每天的最高獲利)
第一次買剛好是第一次賣前的最低價格
第二次賣正好是第一次賣後的最高價格
找出區域最大獲利中的最大值
測試計算複雜度
3.程式碼
class Solution {
public:
int maxProfit(vector<int>& prices) {
int size = prices.size();
if (size < 2) {
return 0;
}
//對某一天來說, 第一次交易 (該天價格 - 最小價格)
vector<int> first(prices.size(), 0);
int minV = prices[0];
for (int i = 1; i < size; i++) {
first[i] = max(first[i - 1], (prices[i] - minV));
minV = min(minV, prices[i]);
}
//對某一天來說, 第二次交易 (最大價格 - 該天價格)
int maxV = prices[size - 1];
int res = 0;
for (int i = size - 2; i >= 0; i--) {
maxV = max(maxV, prices[i]);
res = max(res, (maxV - prices[i] + first[i]));
}
return res;
}
};
Last updated