当前位置: 首页 > 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.jsqmd.com/news/100835/

相关文章:

  • 从爬取到分析:使用 Pandas 处理头条问答数据
  • list 的cpp简单模拟实现
  • 实用指南:全景相机领域,影石何以杀出重围?
  • Spring AOP
  • 实战为王!数眼智能 AI 网页解析全流程操作(含 API 接入 + 竞品分析)
  • 带你搞懂BootLoader(四)-第三个BootLoader
  • 【案例共创】从0开始使用华为云开发者空间搭建房价预测模型
  • vLLM推理引擎教程6-Nsight Systems性能分析
  • JX6-CON1控制器模块
  • 海外回国eSIM避坑指南一定要提前搞懂,不然真的会被坑惨!
  • spark读hive偶尔出现table not found
  • keyence颜色传感器LR-W70使用(最多可区分16种颜色)
  • Wan2.2-T2V-A14B模型部署与高保真T2V实战
  • Kubernetes Debug 专用镜像实践指南
  • AIGC简介
  • LangGraph4j 入门
  • 基于VUE的企业信息管理系统 [VUE]-计算机毕业设计源码+LW文档
  • Linux SSH隧道代理转发及多层转发
  • 硬核拆解:这套电影解说工作流,如何帮你零成本搭建AI影视解说SaaS
  • 12/16
  • LobeChat安全与权限管理实战解析
  • Nano Banana Pro 如何重塑 AI 驱动的教育未来
  • 黑科技加持,工作效率翻倍!这 9 款小众软件宝藏盘点
  • 女朋友到家前 10 分钟,空调自动开暖风(小智 MCP 实战)
  • 12.12 标签(四) 表格
  • 海报设计无从下手?这3个技巧让你告别空白画布
  • LobeChat能否实现段落缩写功能?长文本精炼助手
  • β-Amyloid (25-35);GSNKGAIIGLM
  • Hutool Beanutil.copyproperties() 是浅拷贝还是深拷贝 - Higurashi
  • 【小白笔记】大数加法