Best Time to Buy and Sell Stock III

Best Time to Buy and Sell Stock III

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.

 

c++版本代码:

class Solution {

public:

    int maxProfit(vector<int> &prices) {

        int profit = 0, n = prices.size();

        if( n==0 ) {

            return 0;

        }

        int l[n], r[n];

        memset(l, 0, sizeof(int)*n);

        memset(r, 0, sizeof(int)*n);

        int min = prices[0];

        for(int i=1; i<n; i++) {

            l[i] = prices[i] - min > l[i-1] ? prices[i] - min : l[i-1];

            min = prices[i] < min ? prices[i] : min;

        }

        int max = prices[n-1];

        for(int i=n-2; i>=0; i--) {

            r[i] = max - prices[i] > r[i+1] ? max - prices[i] : r[i+1];

            max = prices[i] > max ? prices[i] : max;

        }

        for (int i=0; i<n ;i++) {

            profit = l[i] + r[i] > profit ? l[i] + r[i] : profit;

        }

        return profit;

    }

}; 

  Java版本代码:

public class Solution {

    public int maxProfit(int[] prices) {

     if(prices == null || prices.length == 0) {

         return 0;

     }

     int n = prices.length;

     int[] left = new int[n];

     int[] right = new int[n];

     int min = prices[0];

     for(int i=1; i<n; i++) {

         left[i] = left[i - 1] > prices[i] - min ? left[i - 1] : prices[i] - min;  

         min = min < prices[i] ? min : prices[i];

     }

     int max = prices[n-1];

     for(int i=n-2; i>0; i--) {

         right[i] = right[i + 1] > max - prices[i] ? right[i + 1] : max - prices[i]; 

         max = max > prices[i] ? max : prices[i];

     }

     int profit = 0;

     for(int i=0; i<n; i++) {

         profit = profit > left[i] + right[i] ? profit : left[i] + right[i];

     }

     return profit;

    }

}

  

你可能感兴趣的:(time)