leetcode309. 最佳买卖股票时机含冷冻期

题目大意

给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。​

设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):

  • 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
  • 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。

示例:

输入: [1,2,3,0,2]
输出: 3 
解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]

解题思路

创建两个数组sell和hold,sell[i]表示第i天手里没有股票时的最大收益,hold[i]表示第i天持有股票时的最大收益。
如何求sell[i]:或者是前一天手里没有股票的收益,或者是前一天手里有股票,今天把股票卖掉的收益;
如何求hold[i]:或者是前一天手里有股票的收益,或者是前两天卖了股票后,今天买股票之后的收益;

class Solution {
public:
    int maxProfit(vector<int>& prices) {
    	if (prices.empty())
    	{
    		return 0;
    	}

    	vector<int> sell(prices.size(), 0), hold(prices.size(), 0);
    	hold[0] = -prices[0];

    	for (int i = 1; i < prices.size(); ++i){
    		sell[i] = max(sell[i - 1], hold[i - 1] + prices[i]);
    		hold[i] = max(hold[i - 1], i >= 2 ? sell[i - 2] - prices[i] : -prices[i]);
    	}
    	return sell.back();
    }
};

猜你喜欢

转载自blog.csdn.net/qq_41092190/article/details/106036847