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

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

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


类型题:

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]);
    }
}



上一篇:【leetcode 动态规划 C++】309. Best Time to Buy and Sell Stock with Cooldown


下一篇:实现QQ、微信、新浪微博和百度第三方登录(Android Studio)