动态规划--买卖股票含冷冻期309

这篇具有很好参考价值的文章主要介绍了动态规划--买卖股票含冷冻期309。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

动态规划--买卖股票含冷冻期309,算法,动态规划,算法

        这道题很明显下一天的利润需要由上一天的状态推导出来,所以这是很明显的动态规划问题

        普通的股票问题有两种状态:持有股票的利润,不持有股票的利润,但这道题有一个冷冻期,使得这道题有4种状态:

        1、持有股票的利润;                                                                                              j==0

        不持有股票(持有--》不持有)利润:

               2、继承上一次所有不持有导致的不持有股票下次没有冷冻期)利润状态     j==1

               3、上一次没有卖出股票所导致的不持有股票(下次有冷静期)利润状态         j==2

        4、冷冻期(上次状态3)不持有股票的利润                                                            j==3

动态五部曲:

        1、定义dp数组含义:dp[i][j]第i天第j个状态所得到的利润

        2、确定递推公式:

               持有股票利润来源:上一次持有、上次没有卖出股票这次买入、冷冻期的不持有买入

               Math.max(      dp[i-1][0] ,      dp[i-1][1]-prices[i]       ,   dp[i-1][3]-prices[i])        j==0

              上次卖出股票,这次不持有(下次没有冷冻期)来源:上次所有不持有的状态

                                                         Math.max( dp[i-1][1]  , dp[i-1][2] ,  dp[i-1][3])       j==1

              上次没有卖出股票,这次不持有(下次有冷静期)来源:上次持有,这次卖出

                                                            dp[i-1][0]+prices[i]                                                  j==2
               

                冷冻期的不持有来源:上次卖出股票的不持有

                                               dp[i-1][2]                                                                             j==3

        3、初始化

                dp[0][0] = prices[i]  ;   第一次买入股票导致利润为负,其余不持有状态初始化为0

        4、遍历顺序

                从前往后,因为需要前一个状态来推导下一个状态

        5、打印dp数组

动态规划--买卖股票含冷冻期309,算法,动态规划,算法

代码如下:

int[][] dp = new int[prices.length][4];
        //初始化
        dp[0][0] = -prices[0];
        dp[0][1] = 0;
        dp[0][2] = 0;
        dp[0][3] = 0;
        for(int i = 1;i<prices.length;i++){
            dp[i][0] = Math.max(dp[i-1][0],Math.max(dp[i-1][1]-prices[i],dp[i-1][3]-prices[i]));
            dp[i][1] = Math.max(dp[i-1][3],Math.max(dp[i-1][1],dp[i-1][2]));//保持不持有状态
            dp[i][2] = dp[i-1][0]+prices[i];//卖出股票后不持有 上次持有变不持有
            dp[i][3] = dp[i-1][2];
        }
        for(int i = 0;i<dp.length;i++){
            for(int j = 0;j<dp[0].length;j++){
                System.out.print(" "+dp[i][j]);
            }
            System.out.println();
        }
        return Math.max(dp[dp.length-1][1],Math.max(dp[dp.length-1][2],dp[dp.length-1][3]));

                

                      

        文章来源地址https://www.toymoban.com/news/detail-861087.html

到了这里,关于动态规划--买卖股票含冷冻期309的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 力扣 -- 309. 最佳买卖股票时机含冷冻期

     题目链接:309. 最佳买卖股票时机含冷冻期 - 力扣(LeetCode) 下面是用动态规划的思想解决这道题的过程,相信各位小伙伴都能看懂并且掌握这道经典的动规题目滴。   参考代码:  以上就是用动态规划的思想分析这道题目的整个过程啦,你学会了吗?如果以上题解对你有

    2024年02月13日
    浏览(30)
  • 力扣 309. 买卖股票的最佳时机含冷冻期

    题目来源:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-cooldown/description/ C++题解:动态规划 状态1:表示持有股票。更新为之前持有股票(dp[i-1][0])或者不持有股票且不处于冷冻期后买入(dp[i-1][2]-prices[i])。 状态2:表示不持有股票且处于冷冻期,即卖出。更新为持有

    2024年02月22日
    浏览(26)
  • 309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费

    力扣题目链接(opens new window) 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。 设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)

    2024年01月16日
    浏览(34)
  • 【LeetCode】309. 买卖股票的最佳时机含冷冻期

    给定一个整数数组 prices ,其中第    prices[i]  表示第  i  天的股票价格 。​ 设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。 注意: 你不能同时参与

    2024年02月10日
    浏览(29)
  • 【第51天| 309.最佳买卖股票时机含冷冻期 ● 714.买卖股票的最佳时机含手续费 】

    三个状态: 1. 当前持有股票 状态1 2. 当前不持有股票,且不是今天卖出的股票 状态2 3. 当前不持有股票, 且股票是今天卖出的 状态3 题目要求前一天卖出了股票今天就不能买。所以今天持有股票 状态1 一定是昨天的 状态2 在今天买了股票,或者就是保持了昨天的 状态1 。 状

    2024年02月08日
    浏览(31)
  • 【学会动态规划】最佳买卖股票时机含冷冻期(15)

    目录 动态规划怎么学? 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后: 学习一个算法没有捷径,更何况是学习动态规划, 跟我一起刷动态规划算法题,一起学会动态规划! 题目链接:309. 最佳买卖股票时机含冷冻

    2024年02月14日
    浏览(42)
  • 【LeetCode动态规划#13】买卖股票含冷冻期(状态众多,比较繁琐)、含手续费

    力扣题目链接(opens new window) 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。 设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)

    2023年04月25日
    浏览(35)
  • 算法[动态规划]---买卖股票最佳时机

    1、题目: 给你一个整数数组 prices,其中 prices[i] 表示某支股票第 i 天的价格。 在每一天,你可以决定是否购买和/或出售股票。你在任何时候最多只能持一股股票。你也可以先购买,然后在同一天出售。 返回你能获得的最大利润 。 2、 分析特点: 题目要求:在任何时候最多

    2024年02月09日
    浏览(32)
  • 算法刷题Day 51 最佳买卖股票时机含冷冻期+买卖股票的最佳时期含手续费

    关键是要画出状态转移图 然后根据状态转移图来写状态转移方程 这道题其实就是在买卖股票II的基础上加入一点变化而已,代码框架还是那个框架。

    2024年02月15日
    浏览(30)
  • 剑指offer(C++)-JZ63:买卖股票的最好时机(一)(算法-动态规划)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 假设你有一个数组prices,长度为n,其中prices[i]是股票在第i天的价格,请根据这个价格数组,返回买卖股票能获得的最大收益 1.你可以买入一次股票和卖出一

    2024年02月04日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包