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).
思路:这道题做了很久,甚是羞愧啊。第一次接触到了反序动态规划,还是要好好学习好好进步,参考这里
class Solution {
public:
int maxProfit(vector<int>& prices) {
int n = prices.size();
if (n <= 1) return 0;
vector<int> left(n, 0);
vector<int> right(n, 0);
//计算从左到右的最大的利益
int minP = prices[0];
int maxP = prices[0];
int maxD = 0;
for (int i = 1; i < n; i++){
if (prices[i]>maxP){
maxP = prices[i];
maxD = max(maxP - minP,maxD);
}
if (prices[i] < minP){
minP = prices[i];
maxP = prices[i];
}
left[i] = maxD;
}
minP = prices[n - 1];
maxP = prices[n - 1];
maxD = 0;
for (int i = n - 2; i >= 0; i--){
if (prices[i] < minP){
minP = prices[i];
maxD = max(maxD, maxP - minP);
}
if (prices[i]>maxP){
minP = prices[i];
maxP = prices[i];
}
right[i] = maxD;
}
maxD = 0;
for (int i = 0; i < n ; i++){
maxD = max(maxD, left[i] + right[i]);
}
return maxD;
}
};