题目描述
Say you have an array for which the i th 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).
题目III:在题目I的基础上,更改条件为最多交易两次,手上最多只能持有一支股票,求最大收益。
方法:以第i天为分界线,计算第i天之前进行一次交易的最大收益,和第i天之后进行一次交易的最大收益,max{preProfit[i] + postProfit[i]} (0≤i≤n-1)就是最大收益。第i天之前和第i天之后进行一次的最大收益求法同Best Time to Buy and Sell Stock I。
实现代码:
class Solution {
public:
int maxProfit(vector<int> &prices) {
if(prices.size() == 0)
return 0;
int max_profit=0;
for(int i=0;i<prices.size();i++)
{
int cur_profit=profitFunc(prices,0,i)+profitFunc(prices,i+1,prices.size()-1);
if(cur_profit > max_profit)
max_profit=cur_profit;
}
return max_profit;
}
int profitFunc(vector<int> &price,int begin,int end)
{
int low=price[begin];
int maxprofit=0;
int profit=0;
for(int j=begin+1;j<=end;j++)
{
profit=price[j]-low;
if(profit>maxprofit) maxprofit=profit;
if(price[j]<low) low=price[j];
}
return maxprofit;
}
};