2021-12-13 309

这篇博客介绍了如何使用动态规划解决股票交易的最佳买卖时机问题,特别是在存在冷冻期的情况下。作者通过建立状态转移方程,详细解析了如何计算每一天的买入、卖出和冷冻期的最大利润,并提供了相应的Java代码实现。最后,强调了在处理最后一天可能的最大利润时需要考虑所有可能的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


class Solution {
    public int maxProfit(int[] prices) {
        //错因:算法思路没想到就是细分情景,穷举出所有可能的情况再动态规划
        int n=prices.length;
 //dp[i][0]表示第i天买入股票时的最大利润--->
 //注意这里的买入不是今天就刚买入的意思可能是好几天前买入的状态
        //dp[i][1]表示第i天卖出股票时的最大利润
        //dp[i][2]表示第i天刚好处于冷冻期时的最大利润
        //dp[i][3]表示第i天未处于冷冻期时最大利润
        int[][] dp=new int[n+1][4];
        dp[0][0]=-prices[0];
        for(int i=1;i<n+1;i++){
dp[i][0]=Math.max(dp[i-1][0],Math.max(dp[i-1][2],dp[i-1][3])-prices[i-1]);
            dp[i][1]=dp[i-1][0]+prices[i-1];
            dp[i][2]=dp[i-1][1];
            dp[i][3]=Math.max(dp[i-1][2],dp[i-1][3]);
        }
       // return dp[n][1]>0?dp[n][1]:0;
       //注意我们上面列举出的情况,如果上面最后一天不是股票刚卖出的一天
       //那么此时的dp[n][1]就是继承上一次股票卖出时的最大值,
       //所以我们要列出最后一天可能出现最大值的所有情况
       return Math.max(dp[n][1],Math.max(dp[n][2],dp[n][3]));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值