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