【问题描述】[中等]

【解答思路】

1. 动态规划

动态规划流程
第 1 步:设计状态
f[i]表示第 i 天结束之后的「累计最大收益」

第 2 步:状态转移方程

f[i][0]=max(f[i−1][0],f[i−1][2]−prices[i])
f[i][1]=f[i−1][0]+prices[i]
f[i][2]=max(f[i−1][1],f[i−1][2])

第 3 步:考虑初始化

第 4 步:考虑输出
max(f[n−1][0],f[n−1][1],f[n−1][2]) ➡ max(f[n−1][1],f[n−1][2])

第 5 步:考虑是否可以状态压缩
可 见方法2

f[0][1] 置为0

因为f[1][1]只和f[0][0]有关系,f[0][1]只影响f[1][2],而f[1][2]又是由f[0][1]和f[0][2]共同决定的,第0天f[0][1]和f[0][2]是同一状态也就无所谓了。

时间复杂度:O(N) 空间复杂度:O(N)

class Solution {public int maxProfit(int[] prices) {if (prices.length == 0) {return 0;}int n = prices.length;// f[i][0]: 手上持有股票的最大收益// f[i][1]: 手上不持有股票,并且处于冷冻期中的累计最大收益// f[i][2]: 手上不持有股票,并且不在冷冻期中的累计最大收益int[][] f = new int[n][3];f[0][0] = -prices[0];for (int i = 1; i < n; ++i) {f[i][0] = Math.max(f[i - 1][0], f[i - 1][2] - prices[i]);f[i][1] = f[i - 1][0] + prices[i];f[i][2] = Math.max(f[i - 1][1], f[i - 1][2]);}return Math.max(f[n - 1][1], f[n - 1][2]);}
}
2. 动态规划路径压缩


时间复杂度:O(N) 空间复杂度:O(1)

class Solution {public int maxProfit(int[] prices) {if (prices.length == 0) {return 0;}int n = prices.length;int f0 = -prices[0];int f1 = 0;int f2 = 0;for (int i = 1; i < n; ++i) {int newf0 = Math.max(f0, f2 - prices[i]);int newf1 = f0 + prices[i];int newf2 = Math.max(f1, f2);f0 = newf0;f1 = newf1;f2 = newf2;}return Math.max(f1, f2);}
}

【总结】

1.动态规划流程

第 1 步:设计状态
第 2 步:状态转移方程
第 3 步:考虑初始化
第 4 步:考虑输出
第 5 步:考虑是否可以状态压缩

2. 三个状态 三数组DP 两数组DP信息量过大 处理不来

转载链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-cooldown/solution/zui-jia-mai-mai-gu-piao-shi-ji-han-leng-dong-qi-4/

[Leetcode][第309题][JAVA][最佳买卖股票时机含冷冻期][动态规划][压缩空间]相关推荐

  1. 109. Leetcode 309. 最佳买卖股票时机含冷冻期 (动态规划-股票交易)

    步骤一.确定状态: 确定dp数组及下标含义 dp[i]表示的是到第i天能获得的利润,但这里每天的状态下就不仅仅是持股和不 持股两种状态了,而是持股, 不持股当天卖出和不持股当天没卖出三种状态, 因为冷 ...

  2. 【LeetCode】309. Best Time to Buy and Sell Stock with Cooldown 最佳买卖股票时机含冷冻期(Medium)(JAVA)

    [LeetCode]309. Best Time to Buy and Sell Stock with Cooldown 最佳买卖股票时机含冷冻期(Medium)(JAVA) 题目地址: https: ...

  3. 【必备算法】动态规划:LeetCode题(九)309. 最佳买卖股票时机含冷冻期,714. 买卖股票的最佳含手续费

    买卖股票系列: [必备算法]动态规划:一个思路解决六道股票问题 [必备算法]动态规划:LeetCode题(七)121. 买卖股票的最佳时机,122. 买卖股票的最佳时机 II [必备算法]动态规划:L ...

  4. Java实现 LeetCode 309 最佳买卖股票时机含冷冻期

    309. 最佳买卖股票时机含冷冻期 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 .​ 设计一个算法计算出最大利润.在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股 ...

  5. LeetCode 309. 最佳买卖股票时机含冷冻期 | Python

    文章目录 309. 最佳买卖股票时机含冷冻期 题目 解题思路 代码实现 实现结果 欢迎关注 309. 最佳买卖股票时机含冷冻期 题目来源:力扣(LeetCode)https://leetcode-cn ...

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

    LeetCode:309. 最佳买卖股票时机含冷冻期(python) 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 . 设计一个算法计算出最大利润.在满足以下约束条件下,你可以尽可能 ...

  7. leetcode 309. Best Time to Buy and Sell Stock with Cooldown | 309. 最佳买卖股票时机含冷冻期(动态规划)

    题目 https://leetcode.com/problems/best-time-to-buy-and-sell-stock-with-cooldown/ 题解 我知道要dp,但是不知道要怎么dp ...

  8. leetcode 最佳买卖股票时机含冷冻期(Java)

    leetcode题目 最佳买卖股票时机含冷冻期 -- leetcode 309 题目描述 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 .​设计一个算法计算出最大利润.在满足以下约束 ...

  9. 力扣刷题day44|309最佳买卖股票时机含冷冻期、714买卖股票的最佳时机含手续费

    文章目录 309. 最佳买卖股票时机含冷冻期 思路 动态规划五部曲 714. 买卖股票的最佳时机含手续费 贪心思路 难点 动态规划思路 动态规划五部曲 309. 最佳买卖股票时机含冷冻期 力扣题目链接 ...

最新文章

  1. LeetCode--448
  2. php mysqli new 连接,php mysqli 连接数据库
  3. UNIX再学习 -- 可重入函数和 SIGCHLD 语义
  4. Java IO 之 管道流 原理分析
  5. c#爬虫-使用ChromeDriver 所见即所得
  6. c#如何识别一张图片的格式
  7. 在LINQPad中征服ASP.NET Boilerplate查询性能
  8. 根据href给当前导航添加样式
  9. python用户管理系统模块_Django的用户模块与权限系统的示例代码
  10. 除了iframe嵌套还有什么嵌套_嵌套了ROUND函数,为什么还会差1分钱,值得收藏
  11. TensorFlow实现mnist手写数字识别项目代码
  12. 区块链技术介绍PPT
  13. 华为模拟器eNSP下载与安装(win10系统)
  14. 【智能安防监控补光灯调光芯片方案】单节锂电降压恒流驱动芯片FP8013 最大输出3A体积小/静态功耗低/效率高/支持无频闪调光
  15. 地震后的重建!——AD灾难恢复!
  16. 开会没带纸和笔?按下手机这个按钮,一键完成会议纪要
  17. XTUOJ-1299-String
  18. Java中instanceof关键字的用法
  19. 鸿蒙 微内核 什么意思,鸿蒙系统所说的「微内核」,具体是什么?
  20. 02-windows调试工具(DebugDiag使用)

热门文章

  1. CommonJs、AMD、CMD模块化规范
  2. [水煮 ASP.NET Web API2 方法论](1-1)在MVC 应用程序中添加 ASP.NET Web API
  3. 浅谈城市规划在移动GIS方面的应用发展
  4. app.config数据库路径问题
  5. C# MVC的博客开发(三)注册
  6. 地壳中元素含量排名记忆口诀_广州地化所等发现洋内弧大陆地壳成熟新机制
  7. Program type already present: android.support.design.widget.xx
  8. http://w3cschool.codecloud.net/python/python-object.html?ref=myread
  9. 关于Loadrunner 错误解决
  10. centos中nodejs npm环境完全删除