Best Time to Buy and Sell Stock III(买卖股票的最佳时机 III)

http://www.lintcode.com/en/problem/best-time-to-buy-and-sell-stock-iii/

public class Solution {
    /*
     * @param prices: Given an integer array
     * @return: Maximum profit
     */
    public int maxProfit(int[] prices) {
        // write your code here
        int n = prices.length;
        if (n == 0) {
            return 0;
        }
        int[] dpLeft = new int[n];
//        用来记录到i位置时,可以得到的最大收益
        int[] dpRight = new int[n];
//        用来记录从i位置开始向后,可以得到的最大收益
        int min = prices[0];
//        第一天为0
        for (int i = 1; i < n; i++) {
            min = Math.min(prices[i], min);
//            求得最小值。是最好的入场时间
            dpLeft[i] = Math.max(dpLeft[i - 1], prices[i] - min);
//            最大值是当天做交易的和不做交易之中的最大值
        }
        int max = prices[n - 1];
//        第一天为0
        for (int i = n - 2; i >= 0; i--) {
            max = Math.max(prices[i], max);
//            求得最大值。是最好的出场时间
            dpRight[i] = Math.max(dpRight[i + 1], max - prices[i]);
//            最大值是当天做交易的和不做交易之中的最大值
        }
        int res = Integer.MIN_VALUE;
        for (int i = 0; i < n; i++) {
//            两次交易,不能交叉
            res = Math.max(res, dpLeft[i] + dpRight[i]);
        }
        return res;
    }
}

你可能感兴趣的:(Best Time to Buy and Sell Stock III(买卖股票的最佳时机 III))