题目:
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) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(prices.size() == 0 || prices.size() == 1)
{
return 0;
}
vector<int> historyProfit;
historyProfit.assign(prices.size(),0);
vector<int> futureProfit;
futureProfit.assign(prices.size(),0);
int min = prices[0];
for(int i = 1; i < prices.size(); i++)
{
min = min<prices[i]?min:prices[i];
int p = prices[i] - min;
historyProfit[i] = p<historyProfit[i-1]?historyProfit[i-1]:p;
}
int max = prices[prices.size()-1];
for(int i = prices.size()-2; i >= 0; i--)
{
max = max<prices[i]?prices[i]:max;
int p = max - prices[i];
futureProfit[i] = p<futureProfit[i+1]?futureProfit[i+1]:p;
}
int m = futureProfit[0] + historyProfit[0];
for(int i = 1; i < prices.size(); i++)
{
if(futureProfit[i] + historyProfit[i] > m)
{
m = futureProfit[i] + historyProfit[i];
}
}
return m;
}
};