训练营第五十一天 | ● 309.最佳买卖股票时机含冷冻期 ● 714.买卖股票的最佳时机含手续费 ●总结

发布时间:2024年01月18日

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

好难

考虑四个状态

持有;持续卖出;今日卖出;冷冻期视频讲解:

代码随想录

class Solution {
    public int maxProfit(int[] prices) {
        if(prices == null || prices.length == 0 || prices.length == 1) return 0;
        int len = prices.length;
        int[][] dp = new int[len][4];
        dp[0][0] = -prices[0];//第0天持有
        dp[0][1] = 0;//第0天持续卖出
        dp[0][2] = 0;//第0天今日卖出
        dp[0][3] = 0;//第0天冷冻期
        for(int i = 1; i < len; i++) {
            dp[i][0] = Math.max(dp[i-1][0], Math.max(dp[i-1][0] - prices[i], dp[i-1][3] - prices[i]));//第i天持有:前一天持有;今日买入:前一天持续不持有,前一天冷冻期
            dp[i][1] = Math.max(dp[i-1][1], dp[i-1][3]);//第i天持续不持有:前一天持续不持有,前一天冷冻期
            dp[i][2] = dp[i-1][0] + prices[i];//第i天今日卖出:前一天持有
            dp[i][3] = dp[i-1][2];//第i天冷冻期:前一天今日卖出
        }
        return Math.max(Math.max(dp[len-1][1],dp[len-1][2]),dp[len-1][3]);
    }
}

class Solution {
    public int maxProfit(int[] prices) {
        if(prices == null || prices.length == 0 || prices.length == 1) return 0;
        int len = prices.length;
        int[][] dp = new int[len][2];
        dp[0][0] = 0;//第0天不持有
        dp[0][1] = -prices[0];//第0天持有
        dp[1][0] = Math.max(0, prices[1] - prices[0]);
        dp[1][1] = Math.max(-prices[0], -prices[1]);
        for(int i = 2; i < len; i++) {
            dp[i][0] = Math.max(dp[i-1][0], dp[i-1][1] + prices[i]);//第i天不持有
            dp[i][1] = Math.max(dp[i-1][1], dp[i-2][0] - prices[i]);//第i天持有,包括前一天的持有和今天的买入,因为有冷冻期,所以是前两天的不持有减去今天的价格
        }
        return dp[len-1][0];
    }
}

?714.买卖股票的最佳时机含手续费??

代码随想录

class Solution {
    public int maxProfit(int[] prices, int fee) {
        if(prices == null || prices.length < 2) return 0;
        int len = prices.length;
        int[][] dp = new int[len][2];
        dp[0][0] = 0;
        dp[0][1] = -prices[0] - fee;
        for(int i = 1; i < len; i++) {
            dp[i][0] = Math.max(dp[i-1][0], dp[i-1][1] + prices[i]);
            dp[i][1] = Math.max(dp[i-1][1], dp[i-1][0] - prices[i] - fee);//减去交易费
        }
        return dp[len-1][0];
    }
}

?股票总结?

之后总结

代码随想录

文章来源:https://blog.csdn.net/Tropic____/article/details/135670076
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。