Best Time to Buy and Sell Stock III 兩次買賣股票的最佳時機 (重重重)
阿新 • • 發佈:2019-02-10
題目:
只能買賣兩次,而且最大手裡只有一隻股票。求最大利潤。
解答:
參考:
程式碼:
/* 解釋: 首先,因為能買2次(第一次的賣可以和第二次的買在同一時間),但第二次的買不能在第一次的賣左邊。 所以維護2個表,f1和f2,size都和prices一樣大。 意義: f1[i]表示 -- 截止到i下標為止,左邊所做交易能夠達到最大profit; f2[i]表示 -- 截止到i下標為止,右邊所做交易能夠達到最大profit; 那麼,對於f1 + f2,尋求最大即可。 */ class Solution { public: int maxProfit(vector<int> &prices) { int size = prices.size(); if (size == 0) return 0; vector<int> f1(size); vector<int> f2(size); int minV = prices[0]; f1[0] = 0; for (int i = 1; i < size; i++) { minV = min(minV, prices[i]); f1[i] = max(f1[i - 1], prices[i] - minV); } int maxV = prices[size - 1]; f2[size - 1] = 0; for (int i = size - 2; i >= 0; i--) { maxV = max(maxV, prices[i]); f2[i] = max(f2[i + 1], maxV - prices[i]); } int sum = 0; for (int i = 0; i < size; i++) { sum = max(sum, f1[i] + f2[i]); } return sum; } };