leetcode——123——Best Time to Buy and Sell Stock III

来源:互联网 发布:悠仁亲王 弱智 知乎 编辑:程序博客网 时间:2024/06/05 04:19

Say you have an array for which the ith element is the price of a given stock on dayi.

Design an algorithm to find the maximum profit. You may complete at most two transactions.


题意:用一个数组表示股票每天的价格,数组的第i个数表示股票在第i天的价格。最多交易两次,手上最多只能持有一支股票,求最大收益。

分析:动态规划法。以第i天为分界线,计算第i天之前进行一次交易的最大收益preProfit[i],和第i天之后进行一次交易的最大收益postProfit[i],最后遍历一遍,max{preProfit[i] + postProfit[i]} (0≤i≤n-1)就是最大收益。第i天之前和第i天之后进行一次的最大收益求法同Best Time to Buy and Sell Stock I。

class Solution {public:    int maxProfit(vector<int>& prices) {        if (prices.size() < 2) return 0;                int n = prices.size();        vector<int> preProfit(n,0);        vector<int> postProfit(n,0);                int curMin = prices[0];        for (int i = 1; i < n; i++) {            curMin = min(curMin, prices[i]);            preProfit[i] = max(preProfit[i - 1], prices[i] - curMin);        }                int curMax = prices[n - 1];        for (int i = n - 2; i >= 0; i--) {            curMax = max(curMax, prices[i]);            postProfit[i] = max(postProfit[i + 1], curMax - prices[i]);        }                int maxProfit = 0;        for (int i = 0; i < n; i++) {            maxProfit = max(maxProfit, preProfit[i] + postProfit[i]);        }                return  maxProfit;    }};



0 0
原创粉丝点击