【LeetCode笔记】309. 最佳买卖股票时机含冷冻期(Java、动态规划)
文章目录
- 题目描述
- 思路 && 代码
- 二刷
题目描述
- 股票系列!这次加入了冷冻期要素,需要考虑更多的状态
思路 && 代码
- 每天,都有三个状态:开一个 dp = int[n][3] 二维数组
- 主要思路…就是理解几种状态,以及转移的思路(见注释)
- 时空复杂度:O(n)、O(n)
class Solution {public int maxProfit(int[] prices) {// 对每一天,存储三个状态:// 0)持有(昨天就持有 or 今天买入(那么昨天肯定没卖))// 1)不持有,没卖(昨天肯定也没有)// 2)不持有,但是是今天卖的(昨天肯定持有)int[][] dp = new int[prices.length][3];// 初始化:dp[0][0] = -prices[0]; dp[0][1] = 0; dp[0][2] = 0; for(int i = 1; i < prices.length; ++i) {// 1)今天持有,那么昨天:【本就持有】or【不持有(今天再买)】dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1] - prices[i]); // 2)今天不持有,也没卖,那么昨天:【不持有且没卖】or【卖了导致不持有】dp[i][1] = Math.max(dp[i - 1][1], dp[i - 1][2]); // 3)今天卖了,导致不持有。那么昨天:一定【持有】dp[i][2] = dp[i - 1][0] + prices[i]; }// 最后一天的两种【不持有状态】,取 maxreturn Math.max(dp[prices.length - 1][1], dp[prices.length - 1][2]); }
}
- 无注释版
class Solution {public int maxProfit(int[] prices) {int[][] dp = new int[prices.length][3];dp[0][0] = -prices[0]; dp[0][1] = 0; dp[0][2] = 0; for(int i = 1; i < prices.length; ++i) {dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1] - prices[i]); dp[i][1] = Math.max(dp[i - 1][1], dp[i - 1][2]); dp[i][2] = dp[i - 1][0] + prices[i]; }return Math.max(dp[prices.length - 1][1], dp[prices.length - 1][2]); }
}
二刷
- 代码量少的一,就 9 行!但是难度还是有。
- 我觉得难点在于状态的考虑,但是理清状态之后,或许就很难做错了= =
class Solution {public int maxProfit(int[] prices) {// 难点:如何思考出三种状态,其全面性// Part 1: 初始化int[][] dp = new int[prices.length][3]; // 每一天,存储三种状态:dp[0][0] = -prices[0]; // 1)持有,今天买的dp[0][1] = 0; // 2)不持有,并不是因为今天卖了dp[0][2] = 0; // 3)不持有,因为今天卖了(当然,dp[0][2] 是初始化,就当作卖了个寂寞)for(int i = 1; i < prices.length; i++) {dp[i][0] = Math.max(dp[i - 1][1] - prices[i], dp[i - 1][0]); // 今天有:今天卖,昨天没卖 or 昨天买了dp[i][1] = Math.max(dp[i - 1][1], dp[i - 1][2]); // 今天不持有:昨天卖了 or 昨天就不持有dp[i][2] = dp[i - 1][0] + prices[i]; // 今天卖了,只能是昨天持有}// 不持有状态,二选一吧!return Math.max(dp[prices.length - 1][1], dp[prices.length - 1][2]);}
}
【LeetCode笔记】309. 最佳买卖股票时机含冷冻期(Java、动态规划)相关推荐
- 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 309. 最佳买卖股票时机含冷冻期(动态规划)
1. 题目 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 . 设计一个算法计算出最大利润.在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 你不能同时参与多 ...
- leetcode系列-309.最佳买卖股票时机含冷冻期
题目描述:给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格 .设计一个算法计算出最大利润.在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):卖 ...
- 力扣刷题day44|309最佳买卖股票时机含冷冻期、714买卖股票的最佳时机含手续费
文章目录 309. 最佳买卖股票时机含冷冻期 思路 动态规划五部曲 714. 买卖股票的最佳时机含手续费 贪心思路 难点 动态规划思路 动态规划五部曲 309. 最佳买卖股票时机含冷冻期 力扣题目链接 ...
- LeetCode 309. 最佳买卖股票时机含冷冻期 | Python
文章目录 309. 最佳买卖股票时机含冷冻期 题目 解题思路 代码实现 实现结果 欢迎关注 309. 最佳买卖股票时机含冷冻期 题目来源:力扣(LeetCode)https://leetcode-cn ...
- 【必备算法】动态规划:LeetCode题(九)309. 最佳买卖股票时机含冷冻期,714. 买卖股票的最佳含手续费
买卖股票系列: [必备算法]动态规划:一个思路解决六道股票问题 [必备算法]动态规划:LeetCode题(七)121. 买卖股票的最佳时机,122. 买卖股票的最佳时机 II [必备算法]动态规划:L ...
- Java实现 LeetCode 309 最佳买卖股票时机含冷冻期
309. 最佳买卖股票时机含冷冻期 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 . 设计一个算法计算出最大利润.在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股 ...
- 力扣 -- 309. 最佳买卖股票时机含冷冻期
题目链接:309. 最佳买卖股票时机含冷冻期 - 力扣(LeetCode) 下面是用动态规划的思想解决这道题的过程,相信各位小伙伴都能看懂并且掌握这道经典的动规题目滴. 参考代码: class Sol ...
- 算法训练第五十一天 | 309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费、股票问题总结
动态规划part12 309.最佳买卖股票时机含冷冻期 题目描述 思路 总结 714.买卖股票的最佳时机含手续费 题目描述 思路 股票问题总结 309.最佳买卖股票时机含冷冻期 题目链接:309.最佳 ...
最新文章
- A02 创建实验环境快照
- Java 复习 —— JMM基础
- OpenGL模型加载和渲染
- VS2013支持多字节
- 调研Android的开发环境的发展演变
- 微信小程序开发教程(六)配置——app.json、page.json详解
- css揭秘实战技巧 - 形状 [二]
- [Android]使用Gradle提交自己开源Android库到Maven中心库
- cad卸载_CAD卸载清理工具(一键清理)
- Python计算器练习
- 本地缓存到分布式缓存( Guava, Caffeine, Memcached, Redis)
- Kaggle数据增强攻略来了!不氪金实现50种语言互译
- 今天开始用 VSU 2010
- n9 android rom,美如画N9盒子线刷固件rom升级包下载(全志H8芯片)
- Layabox3d入门游戏视频教程
- SpringMvc工作原理学习总结
- dell 服务器 重装Linux系统
- 谷歌浏览器设置免跨域 Mac
- 谈读《三国志》 ——开篇引述 【istrangeboy原创】
- 多径信道下的LMS、RLS均衡算法研究(三)
热门文章
- Leetcode--494. 目标和
- c语言课程设计模块结构图,【图片】发几个C语言课程设计源代码(恭喜自己当上技术小吧主)【东华理工大学吧】_百度贴吧...
- vscode写java没有提示_VS Code报错Language Support for Java(TM)插件显示需要JDK11 写java代码没有提示...
- Android仿支付宝UI功能开发,Android 自定义view仿支付宝咻一咻功能
- 链表的一些leetcode题目+python(c++)
- js中立即执行函数会预编译吗_JavaScript预编译过程
- 激战服务器位置,如何选服务器 《激战2》服务器设置讲解
- date日期相减 java_一个小小的Java程序
- 中文python笔记_python 中文编码笔记
- php ci model条件查询,php – CodeIgniter中的多条件WHERE子句