[Leetcode][第309题][JAVA][最佳买卖股票时机含冷冻期][动态规划][压缩空间]
【问题描述】[中等]
【解答思路】
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][最佳买卖股票时机含冷冻期][动态规划][压缩空间]相关推荐
- 109. Leetcode 309. 最佳买卖股票时机含冷冻期 (动态规划-股票交易)
步骤一.确定状态: 确定dp数组及下标含义 dp[i]表示的是到第i天能获得的利润,但这里每天的状态下就不仅仅是持股和不 持股两种状态了,而是持股, 不持股当天卖出和不持股当天没卖出三种状态, 因为冷 ...
- 【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: ...
- 【必备算法】动态规划:LeetCode题(九)309. 最佳买卖股票时机含冷冻期,714. 买卖股票的最佳含手续费
买卖股票系列: [必备算法]动态规划:一个思路解决六道股票问题 [必备算法]动态规划:LeetCode题(七)121. 买卖股票的最佳时机,122. 买卖股票的最佳时机 II [必备算法]动态规划:L ...
- Java实现 LeetCode 309 最佳买卖股票时机含冷冻期
309. 最佳买卖股票时机含冷冻期 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 . 设计一个算法计算出最大利润.在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股 ...
- LeetCode 309. 最佳买卖股票时机含冷冻期 | Python
文章目录 309. 最佳买卖股票时机含冷冻期 题目 解题思路 代码实现 实现结果 欢迎关注 309. 最佳买卖股票时机含冷冻期 题目来源:力扣(LeetCode)https://leetcode-cn ...
- LeetCode:309. 最佳买卖股票时机含冷冻期(python)
LeetCode:309. 最佳买卖股票时机含冷冻期(python) 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 . 设计一个算法计算出最大利润.在满足以下约束条件下,你可以尽可能 ...
- 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 ...
- leetcode 最佳买卖股票时机含冷冻期(Java)
leetcode题目 最佳买卖股票时机含冷冻期 -- leetcode 309 题目描述 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 .设计一个算法计算出最大利润.在满足以下约束 ...
- 力扣刷题day44|309最佳买卖股票时机含冷冻期、714买卖股票的最佳时机含手续费
文章目录 309. 最佳买卖股票时机含冷冻期 思路 动态规划五部曲 714. 买卖股票的最佳时机含手续费 贪心思路 难点 动态规划思路 动态规划五部曲 309. 最佳买卖股票时机含冷冻期 力扣题目链接 ...
最新文章
- LeetCode--448
- php mysqli new 连接,php mysqli 连接数据库
- UNIX再学习 -- 可重入函数和 SIGCHLD 语义
- Java IO 之 管道流 原理分析
- c#爬虫-使用ChromeDriver 所见即所得
- c#如何识别一张图片的格式
- 在LINQPad中征服ASP.NET Boilerplate查询性能
- 根据href给当前导航添加样式
- python用户管理系统模块_Django的用户模块与权限系统的示例代码
- 除了iframe嵌套还有什么嵌套_嵌套了ROUND函数,为什么还会差1分钱,值得收藏
- TensorFlow实现mnist手写数字识别项目代码
- 区块链技术介绍PPT
- 华为模拟器eNSP下载与安装(win10系统)
- 【智能安防监控补光灯调光芯片方案】单节锂电降压恒流驱动芯片FP8013 最大输出3A体积小/静态功耗低/效率高/支持无频闪调光
- 地震后的重建!——AD灾难恢复!
- 开会没带纸和笔?按下手机这个按钮,一键完成会议纪要
- XTUOJ-1299-String
- Java中instanceof关键字的用法
- 鸿蒙 微内核 什么意思,鸿蒙系统所说的「微内核」,具体是什么?
- 02-windows调试工具(DebugDiag使用)
热门文章
- CommonJs、AMD、CMD模块化规范
- [水煮 ASP.NET Web API2 方法论](1-1)在MVC 应用程序中添加 ASP.NET Web API
- 浅谈城市规划在移动GIS方面的应用发展
- app.config数据库路径问题
- C# MVC的博客开发(三)注册
- 地壳中元素含量排名记忆口诀_广州地化所等发现洋内弧大陆地壳成熟新机制
- Program type already present: android.support.design.widget.xx
- http://w3cschool.codecloud.net/python/python-object.html?ref=myread
- 关于Loadrunner 错误解决
- centos中nodejs npm环境完全删除