其他分享
首页 > 其他分享> > 309. 最佳买卖股票时机含冷冻期 ( dp )

309. 最佳买卖股票时机含冷冻期 ( dp )

作者:互联网

LeetCode: 309. 最佳买卖股票时机含冷冻期

在这里插入图片描述


类型题:

121. 买卖股票的最佳时机 (单调栈)

122. 买卖股票的最佳时机 II

714. 买卖股票的最佳时机含手续费 ( dp )



主要是定义状态, 和 含手续费类似, 手续费定义了两个状态 ( 持有股票, 不持有股票 )

本题定义三个状态 ( 持有股票, 不持有股票处于冷冻期, 不持有股票不处于冷冻期 )

d p [ l e n ] [ 3 ] dp[len][3] dp[len][3]

买入股票为负收益, 卖出获得正收益

然后就思考转移方程,怎么由(其他状态 | 上一状态) 转移过来即可。



AC Code

class Solution {
    public int maxProfit(int[] prices) {
        int len = prices.length;
        if(len < 1) return 0;
        int[][] dp = new int[len][3];
        // 定义状态
        // 0 表示持有股票, 1 不持有股票且冷冻期 2 不持有且不处于冷冻期
        dp[0][0] = 0 - prices[0];
        for(int i = 1; i < len; i++){
            // 持有股票可以由上一个状态转移过来 or 买入股票, 买入就是负收益
            dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][2] - prices[i]);
            // 买出? 
            dp[i][1] = Math.max(dp[i - 1][0] + prices[i], dp[i - 1][1]);
            // dp[i][1] = dp[i - 1][0] + prices[i];
            
            dp[i][2] = Math.max(dp[i - 1][1], dp[i - 1][2]);
        }

        return (int)Math.max(dp[len -1][1], dp[len -1][2]);
    }
}



标签:309,int,股票,len,prices,冷冻,dp
来源: https://blog.csdn.net/qq_43765535/article/details/111472671