Example #1
0
 int maxProfit(vector<int>& prices) {
     int n = prices.size();
     if(n < 2) return 0;
     
     vector<int> buys(n, 0);
     vector<int> sells(n, 0);
     
     buys[0] = -prices[0];
     
     int profit = sells[0];
     
     for(int i = 1; i < n; i++)
     {
         int diff = prices[i] - prices[i-1];
         sells[i] = max(buys[i-1] + prices[i], sells[i-1] + diff);
         if(i < 2)
         {
             buys[i] = buys[i-1] - diff;
         }
         else
         {
             buys[i] = max(buys[i-1]-diff, sells[i-2] - prices[i]);
         }
         profit = max(profit, sells[i]);
     }
     return profit;
 }
 int maxProfit(vector<int>& prices) {
     int n = prices.size(); 
     if(n < 2) 
         return 0;
     vector<int> sells(n, 0);
     vector<int> buys(n, 0);
     int delay = 0;
     sells[0] = 0;
     buys[0] = -prices[0];
     sells[1] =  prices[1]-prices[0];
     buys[1] =  -prices[1];
     int res = max(0, prices[1]-prices[0]);
     for(int i=2; i<n; ++i)
     {
         delay = prices[i]-prices[i-1];
         buys[i] = max(sells[i-2]-prices[i], buys[i-1]-delay);
         sells[i] = max(buys[i-1]+prices[i], sells[i-1]+delay);
         if(res <sells[i])
               res = sells[i];
     }
     return res;
 }