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).
思路:这个题本来行到的分成两部分,分别用动态规划,后来在由于做第一个题的时候,看到过一个比较简单的动态规划,因此在这里直接用了,(虽然代码写的不同,想法不同,但是我们用的都是动态规划),一下比较简洁的动态规划的代码:
1 class Solution { 2 public: 3 int maxProfit(vector<int> &prices) { 4 int minl=INT_MAX; 5 int maxr=INT_MIN; 6 7 int size=prices.size(); 8 if(size==0) return 0; 9 vector<int> f1(size); 10 vector<int> f2(size); 11 12 minl=prices[0]; 13 14 for(int i=1;i<size;i++) 15 { 16 minl=min(minl,prices[i]); 17 f1[i]=max(f1[i-1],prices[i]-minl); 18 } 19 20 maxr=prices[size-1]; 21 22 for(int i=size-2;i>=0;i--) 23 { 24 maxr=max(maxr,prices[i]); 25 f2[i]=max(f2[i+1],maxr-prices[i]); 26 } 27 28 int sum = 0; 29 for (int i = 0; i < size; i++) 30 sum = std::max(sum, f1[i] + f2[i]); 31 32 return sum; 33 } 34 };