Say you have an array for which the ith element is the price of a given stock on day i.
Design an algorithm to find the maximum profit. You may complete at most two transactions.
Note:
You may not engage in multiple transactions at the same time (ie, you must sell the stock before you buy again).
思路:f[i]是[0,i]的最大收益, g[i]是[i,n-1]的最大收益,二者加和就是最大收益
class Solution {
public:
int maxProfit(vector<int> &prices) {
int res = 0;
const int n = prices.size();
if (n <2 ) {
return res;
}
vector<int> f(n,0);
vector<int> g(n,0);
for (int i = 1, min_price = prices[0]; i < n; i++) {
min_price = min(min_price, prices[i]);
f[i] = max(f[i-1], prices[i]-min_price);
}
for (int i = n-2, max_price = prices[n-1]; i >= 0; i--) {
max_price = max(max_price, prices[i]);
g[i] = max(g[i+1], max_price-prices[i]);
}
for (int i = 0; i < n; i++) {
res = max(res, f[i]+g[i]);
}
return res;
}
};