309. Best Time to Buy and Sell Stock with Cooldown

题目

动态规划

由于加入了冷冻期,此时需要考虑三个状态(均为第 i 天结束时的情况),对应三种最大的利润:

  • 持有股票时的最大利润;
  • 卖出股票后处于冷冻期的最大利润;
  • 卖出股票后不处于冷冻期的最大利润。

考虑第一种情况,说明在第 i 天要么没进行操作,要么买了股票;考虑第二种情况,说明第 i 天卖出了股票;考虑第三种情况,说明第 i 天什么都没干。对应不同的情况进行操作即可。时间复杂度 O ( n ) O(n) O(n) ,空间复杂度 O ( n ) O(n) O(n)

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        if(prices.empty())
            return 0;
        int n = prices.size();
        int a, b, c, a_, b_, c_, ans = 0;
        a = -prices[0];
        b = 0;
        c = 0;
        // a: max profit from owning stock
        // b: max profit with Cooldown
        // c: max profit from not owning stock and without Cooldown
        for(int i = 1; i < n; ++i) {
            a_ = max(a, c - prices[i]);
            b_ = a + prices[i];
            c_ = max(b, c);
            a = a_;
            b = b_;
            c = c_;
            ans = max(b, c);
        }
        return ans;
    }
};

你可能感兴趣的:(算法,leetcode,算法,数据结构)