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

本文介绍了如何使用动态规划算法解决股票交易问题,通过状态表示和状态转移方程,计算在给定股票价格数组中,满足冷冻期限制下的最大利润。代码展示了如何初始化和填充动态规划表格,最终返回两种可交易状态下可能的最大收益。

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

一、题目分析

给定一个整数数组prices,其中第  prices[i] 表示第 i 天的股票价格 。​

设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):

  • 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

从题目中可以知道一个状态基:

示例分析 :

输入: prices = [1,2,3,0,2]
输出: 3 
解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]

二、算法分析

1.状态表示:题目要求+经验

 2.根据状态基图填写状态转移方程

3.初始化

1.当在第0天的时候,买入dp[0][0]=-p[0];

2.当在第0天的时候,可交易dp[0][0]=0;//啥也不干

3.当在第0天的时候,冷冻期dp[0][0]=0;//买了又卖

 4.返回值

返回三种状态下的最大值,也可只返回最后两个

三、代码实现

public int maxProfit(int[] prices) {
        int len=prices.length;
        //创建dp表,三行,0-》买入状态下的最大值,1-》可交易状态下的最大值 2-》处于冷冻期的最大利润
        int[][] dp=new int[len+1][3];
        //初始化,当在第0天的状态下买入为-p【0】,可交易啥也不干,出入卖出买了又卖=0
        dp[0][0]=-prices[0];
        //填表
        for(int i=1;i<len+1;i++)
        {
            dp[i][0]=Math.max(dp[i-1][0],dp[i-1][1]-prices[i-1]);
            dp[i][1]=Math.max(dp[i-1][1],dp[i-1][2]);
            dp[i][2]=dp[i-1][0]+prices[i-1];

        }
        //返回值
        return Math.max(dp[len][1],dp[len][2]);
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

圆圆无敌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值