文章目录

  • 题目描述
  • 思路 && 代码
    • 二刷

题目描述

  • 股票系列!这次加入了冷冻期要素,需要考虑更多的状态

思路 && 代码

  • 每天,都有三个状态:开一个 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、动态规划)相关推荐

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

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

  2. 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 ...

  3. LeetCode 309. 最佳买卖股票时机含冷冻期(动态规划)

    1. 题目 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 .​ 设计一个算法计算出最大利润.在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 你不能同时参与多 ...

  4. leetcode系列-309.最佳买卖股票时机含冷冻期

    题目描述:给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格 .​设计一个算法计算出最大利润.在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):卖 ...

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

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

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

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

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

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

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

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

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

    题目链接:309. 最佳买卖股票时机含冷冻期 - 力扣(LeetCode) 下面是用动态规划的思想解决这道题的过程,相信各位小伙伴都能看懂并且掌握这道经典的动规题目滴. 参考代码: class Sol ...

  10. 算法训练第五十一天 | 309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费、股票问题总结

    动态规划part12 309.最佳买卖股票时机含冷冻期 题目描述 思路 总结 714.买卖股票的最佳时机含手续费 题目描述 思路 股票问题总结 309.最佳买卖股票时机含冷冻期 题目链接:309.最佳 ...

最新文章

  1. A02 创建实验环境快照
  2. Java 复习 —— JMM基础
  3. OpenGL模型加载和渲染
  4. VS2013支持多字节
  5. 调研Android的开发环境的发展演变
  6. 微信小程序开发教程(六)配置——app.json、page.json详解
  7. css揭秘实战技巧 - 形状 [二]
  8. [Android]使用Gradle提交自己开源Android库到Maven中心库
  9. cad卸载_CAD卸载清理工具(一键清理)
  10. Python计算器练习
  11. 本地缓存到分布式缓存( Guava, Caffeine, Memcached, Redis)
  12. Kaggle数据增强攻略来了!不氪金实现50种语言互译
  13. 今天开始用 VSU 2010
  14. n9 android rom,美如画N9盒子线刷固件rom升级包下载(全志H8芯片)
  15. Layabox3d入门游戏视频教程
  16. SpringMvc工作原理学习总结
  17. dell 服务器 重装Linux系统
  18. 谷歌浏览器设置免跨域 Mac
  19. 谈读《三国志》 ——开篇引述 【istrangeboy原创】
  20. 多径信道下的LMS、RLS均衡算法研究(三)

热门文章

  1. Leetcode--494. 目标和
  2. c语言课程设计模块结构图,【图片】发几个C语言课程设计源代码(恭喜自己当上技术小吧主)【东华理工大学吧】_百度贴吧...
  3. vscode写java没有提示_VS Code报错Language Support for Java(TM)插件显示需要JDK11 写java代码没有提示...
  4. Android仿支付宝UI功能开发,Android 自定义view仿支付宝咻一咻功能
  5. 链表的一些leetcode题目+python(c++)
  6. js中立即执行函数会预编译吗_JavaScript预编译过程
  7. 激战服务器位置,如何选服务器 《激战2》服务器设置讲解
  8. date日期相减 java_一个小小的Java程序
  9. 中文python笔记_python 中文编码笔记
  10. php ci model条件查询,php – CodeIgniter中的多条件WHERE子句