当前位置: 首页 > news >正文

重练算法(代码随想录版) day42 - 动态规划part9

今日刷题量:3
当前刷题总量:156
Easy: 60
Mid: 87
Hard: 9

Day42
解题思想

188、309、714都是在 122(无限次交易)的基础上,加“额外约束”,本质都在维护「今天结束时的状态」

  • 最基础的两种状态是:
    • hold:今天结束时 手里持股
    • cash:今天结束时 手里不持股
  • 区别只在于:
    • 能不能再买
    • 能不能再卖
    • 买 / 卖时有没有额外成本
    • 交易次数有没有上限

股票 DP 进化图谱
1) 121:最多 1 次交易

  • 两状态(不持股/持股),但“买”只能用初始资金:
    • cash = max(cash, hold + p)
    • hold = max(hold, -p)
  • 记忆点:hold 只能变成 -p(只买一次)

2) 122:无限次交易(基础母版)

  • 两状态(cash/hold),可以买很多次:
    • cash = max(cash, hold + p)
    • hold = max(hold, cash_old - p)
  • 记忆点:hold 用的是 cash_old - p(卖了还能再买)

3) 123:最多 2 次交易(次数限制的具体版)

  • 把交易次数展开成 4 个状态:
    • buy1, sell1, buy2, sell2
  • 更新:
    • buy1 = max(buy1, -p)
    • sell1 = max(sell1, buy1 + p)
    • buy2 = max(buy2, sell1 - p)
    • sell2 = max(sell2, buy2 + p)
  • 记忆点:每加一笔交易,就多一对 buy/sell

4) 188:最多 k 次交易(通用版)

  • 123 的通用化:用数组存 k 笔交易的状态
    • buy[i]:第 i+1 次买入后
    • sell[i]:第 i+1 次卖出后
  • 核心更新(价格 p):
    • buy[0] = max(buy[0], -p)
    • sell[0] = max(sell[0], buy[0] + p)
    • buy[i] = max(buy[i], sell[i-1] - p)
    • sell[i] = max(sell[i], buy[i] + p)
  • 并且:k >= n/2 退化为 122(无限次)。
  • 记忆点:188 = “123 的数组版” + “大 k 退化 122”

5) 309:无限次交易 + 冷冻期 1 天

  • 从 122 出发:把 cash 拆成两种(因为卖出后第二天不能买):
    • hold:持股
    • sold:今天刚卖(明天冷冻)
    • rest:不持股且可买
  • 转移:
    • hold = max(hold, rest - p)
    • sold = hold_old + p
    • rest = max(rest, sold_old)
  • 记忆点:冷冻期 = “需要区分刚卖出 vs 休息”

6) 714:无限次交易 + 手续费 fee

  • 从 122 出发:卖出时扣 fee(或买入时扣,等价)
    • cash = max(cash, hold + p - fee)
    • hold = max(hold, cash_old - p)
  • 记忆点:手续费 = “卖出收益少 fee”

练习题目
188.买卖股票的最佳时机IV(hard):https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iv/description/
309.最佳买卖股票时机含冷冻期(mid):https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-cooldown/
714.买卖股票的最佳时机含手续费(mid):https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/description/

http://www.rkmt.cn/news/111611.html

相关文章:

  • A860-2000-T351编码器
  • 带你搞懂BootLoader(四)-第三个BootLoader
  • vLLM推理引擎教程6-Nsight Systems性能分析
  • Kubernetes Debug 专用镜像实践指南
  • 基于VUE的企业信息管理系统 [VUE]-计算机毕业设计源码+LW文档
  • LobeChat能否实现段落缩写功能?长文本精炼助手
  • unity中简单控制角色移动及动画实例--以及角色动画抖动残影拖影处理
  • 【小白笔记】二叉树的前序,中序,后序,层序遍历(递归与迭代)
  • 10390_基于Springboot的影城订票管理系统
  • Java真的不行了,一天收到586份简历
  • Advanced Database Cleaner - WordPress数据库清理优化插件
  • 训练 分心驾驶行为识别模型 ,支持从分类任务到目标检测任务的多种应用场景。17类驾驶员疲劳驾驶状态检测数据集的训练及应用 YOLOV8疲劳驾驶检测系统
  • 【论文阅读笔记】多实例学习手段 Diverse Density(DD):在特征空间中寻找正概念的坐标
  • CSDN 技术分享:浏览器指纹检测、识别与防护全流程解析
  • qt-lambda信号槽机制
  • a5 4444444444
  • 2025年南宁头部环氧酚醛厂家推荐,环氧玻璃钢/石墨烯涂料/无溶剂环氧涂料/环氧酚醛/环氧酚醛设计找哪家 - 品牌推荐师
  • A6 PRE接口发布
  • FastAPI+VUE3创建一个项目的步骤模板(三)
  • 现代软件工程 - 2025秋 - 期末总结
  • 基于SpringBoot的超能驾校线上学习管理系统的设计与实现(毕业设计项目源码+文档)
  • 什么是可信计算?基于可信计算的网络安全自适应防护关键技术及应用
  • 失眠的代价与认知的重塑:通宵测完 Nano Banana Pro,我只想说——这TM是未来!
  • 量子计算突破:零级魔法态蒸馏显著降低开销与噪声
  • Arbess从基础到实践(16) - 集成GitHub实现Java项目构建并自动化Docker部署
  • JavaScript——js基础(详细 全面),适合新手小白,收藏这篇就够了
  • Part 11|模块划分并非越细越好,关键在于明确职责边界
  • 日志打印配置:logback-spring.xml配置;info和error完全区分了,并且按时间拆分了
  • 2025年优测压测平台与JMeter效率成本对比及行业实践
  • 基于微信小程序的跑腿系统的设计与实现毕业设计项目源码