数组-买卖股票的最佳时机 III-中等

描述
假设你有一个数组,它的第i个元素是一支给定的股票在第i天的价格。设计一个算法来找到最大的利润。你最多可以完成两笔交易。
你不可以同时参与多笔交易(你必须在再次购买前出售掉之前的股票)

样例

给出一个样例数组 [4,4,6,1,1,4,2,5], 返回 6

题目链接

分析

从左向右,求最小买入的最大利润;从右向左,求最大卖出的最大利润;最后两次利润分别加和,求最大利润。

程序

class Solution {
public:
    /**
     * @param prices: Given an integer array
     * @return: Maximum profit
     */
    int maxProfit(vector<int> &prices) {
        // write your code here
        if(prices.empty())
            return 0;
        //从左向右
        int minPrice = prices[0];
        int left[prices.size() - 1];
        left[0] = 0;
        for(int i = 1; i < prices.size(); i++){
            minPrice = min(minPrice, prices[i]);
            left[i] = max(left[i - 1], prices[i] - minPrice);
        }
        //从右向左
        int maxPrice = prices[prices.size() - 1];
        int right[prices.size() - 1];
        right[prices.size() - 1] = 0;
        for(int i = prices.size() - 2; i >= 0; i--){
            maxPrice = max(maxPrice, prices[i]);
            right[i] = max(right[i + 1], maxPrice - prices[i]);
        }
        //上下求和
        int profit = -1;
        for(int i = 0; i < prices.size(); i++)
            profit = max(profit, left[i] +right[i]);
        return profit;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_18124075/article/details/80620105