LeetCode HOT100 - 买卖股票的最佳时机含冷冻期

这里就不能像前一个版本一样用简单的后缀策略了

考虑 dp ,实际上和打家劫舍有些像,因为都是依据前面的状态这轮有些操作不能做

所以就是怎么设计状态

如果按照操作来设计的话就是买入或者卖出,但一个时间点也可能没有进行任何操作

所以可以是这样三个

另一种思路就是看目前手上有没有股票

这样设计的出发点是因为题目买入后只能卖出,不能持续买入,因此无论如何手上最多只有一支股票

class Solution {
public:
    int maxProfit(vector<int>& a) {
        // dp[i][0] 没有持有  dp[i][1] 持有
        int n = a.size();
        vector<array<int, 2>> dp(n + 1);
        dp[0][0] = 0;
        dp[0][1] = 0;
        dp[1][0] = 0;
        dp[1][1] = -a[0];
        for (int i = 1; i < n; i++) {
            dp[i + 1][0] = max(dp[i][1] + a[i], dp[i][0]);
            dp[i + 1][1] = max(dp[i][1], dp[i - 1][0] - a[i]);
        }
        return max(dp[n][0], dp[n][1]);
    }
};
posted @ 2026-03-31 22:04  rdcamelot  阅读(11)  评论(0)    收藏  举报