1 class Solution {
2 public:
3 int maxProfit(vector<int> &prices) {
4 const int len = prices.size();
5 if( len < 2 ) return 0;
6 int dp1[len], dp2[len];
7 dp1[0] = 0; //初始化
8 int minprice = prices[0];
9 for(int i=1; i<len; ++i) {
10 dp1[i] = max( dp1[i-1], prices[i] - minprice ); //dp1[i] = max{ dp1[i-1], a[i] - minprice };
11 minprice = min( minprice, prices[i] );
12 }
13 dp2[len-1] = 0; //初始化
14 int maxprice = prices[len-1];
15 for(int i=len-2; i>=0; --i) {
16 dp2[i] = max( dp2[i+1], maxprice - prices[i] ); //dp2[i] = max{ dp2[i+1], maxprice - a[i] };
17 maxprice = max( maxprice, prices[i] );
18 }
19 int ans = 0;
20 for(int i=0; i<len; ++i)
21 ans = max( ans, dp1[i]+dp2[i] ); //dp[i] = dp1[i] + dp2[i]
22 return ans;
23 }
24 };