news 2026/10/12 5:40:18

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
千问 LeetCode 309. 买卖股票的最佳时机含冷冻期 Java实现

这道题是经典的动态规划(状态机)问题。核心在于处理“冷冻期”:卖出股票后,你无法在第二天买入股票(即冷冻期为 1 天)。

我们可以通过维护三个状态来解决这个问题。

思路解析

我们可以定义三种状态:

  1. 持有股票 (hold):当前手里有一支股票。
  2. 不持有股票,处于冷冻期 (cooldown):今天刚卖出股票,明天不能买。
  3. 不持有股票,不处于冷冻期 (free):手里没股票,且不是刚卖出的,可以随时买入。

状态转移方程:

  • hold 的来源:
    • 昨天就持有,今天休息:dp[i-1][hold]
    • 昨天是“不持有且非冷冻期”,今天买入:dp[i-1][free] - prices[i]
  • cooldown 的来源:
    • 昨天持有,今天卖出:dp[i-1][hold] + prices[i]
  • free 的来源:
    • 昨天是冷冻期,今天解冻:dp[i-1][cooldown]
    • 昨天就是“不持有且非冷冻期”,今天继续休息:dp[i-1][free]

Java 代码实现

为了节省空间,我们不需要维护整个二维数组,只需要用三个变量滚动更新即可。

class Solution {
public int maxProfit(int[] prices) {
if (prices == null || prices.length < 2) {
return 0;
}

// 初始化第一天的状态 // hold: 第一天买入,收益为 -prices[0] int hold = -prices[0]; // cooldown: 第一天不可能卖出,收益为 0 int cooldown = 0; // free: 第一天不操作,收益为 0 int free = 0; for (int i = 1; i < prices.length; i++) { // 保存上一轮的状态,防止计算过程中被覆盖 int prevHold = hold; int prevCooldown = cooldown; int prevFree = free; // 状态转移 // 1. 今天持有:要么昨天就持有,要么昨天是 free 状态今天买入 hold = Math.max(prevHold, prevFree - prices[i]); // 2. 今天冷冻:意味着昨天持有,今天卖出了 cooldown = prevHold + prices[i]; // 3. 今天 free:要么昨天是冷冻期今天解冻,要么昨天就是 free free = Math.max(prevCooldown, prevFree); } // 最后一天,手里没股票肯定比手里有股票赚得多(或者持平) // 所以取 cooldown 和 free 的最大值 return Math.max(cooldown, free); }

}

复杂度分析

  • 时间复杂度:O(N),只需要遍历一次价格数组。
  • 空间复杂度:O(1),只使用了常数个变量来存储状态。

关键点总结

  • 冷冻期的处理:买入时只能从 free 状态转移过来,不能从 cooldown 转移(因为 cooldown 的第二天必须继续休息,不能买入)。
  • 最终结果:最后一天肯定是“不持有股票”的状态收益最高,所以答案是 max(cooldown, free)。

需要顺带看看它的变体 LeetCode 122(无冷冻期)的解法吗?对比着看状态机设计会更清晰。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/12 5:39:08

【I2C 技术系列 00】总目录

I2C 是两根线(SDA/SCL)挂一总线器件的"串行总线之王"。本系列从 OD 开漏物理层一路打到 Linux i2c子系统,把"两根线"背后那套电气/协议/仲裁/恢复/驱动全拧成一根线——像 【串口技术系列文档 00】总目录 那样,硬件电气细节拉满,代码能落地,排查有手册。 为…

作者头像 李华
网站建设 2026/10/12 5:38:53

P1220 关路灯【洛谷算法习题】

P1220 关路灯 网页链接 P1220 关路灯 题目描述 某一村庄在一条路线上安装了 nnn 盏路灯&#xff0c;每盏灯的功率有大有小&#xff08;即同一段时间内消耗的电量有多有少&#xff09;。老张就住在这条路中间某一路灯旁&#xff0c;他有一项工作就是每天早上天亮时一盏一盏地…

作者头像 李华
网站建设 2026/10/12 5:37:55

基于Matlab/Simulink的有源电力滤波器APF仿真模型搭建与谐波治理指南

最近有个朋友拿着一张电能质量测试报告来找我&#xff0c;说厂里几台直流充电设备一开&#xff0c;进线电流总谐波畸变率直接飙到27%&#xff0c;不仅电容器柜里嗡嗡响&#xff0c;还偶尔触发保护误动。我一看波形&#xff0c;典型的“不控整流大电感直流侧”经典电流方波。我给…

作者头像 李华
网站建设 2026/10/12 5:37:27

从游戏整理到备份恢复:AnyPS5让PS5内容管理更高效

你有没有遇到过这样的情况&#xff1a;PS5买回来头一个月恨不得天天开机&#xff0c;游戏也囤了不少&#xff0c;等游戏热潮一过&#xff0c;就是“开机不知道玩什么&#xff0c;关机又觉得亏”。我自己的机器就是这么吃灰的&#xff0c;直到后来我决定不折腾硬件&#xff0c;只…

作者头像 李华
网站建设 2026/10/12 5:36:47

ArchLinux(二):图形界面美化(KDE Plasma)

前置操作 设置yay仓库 配置 archlinuxcn 源&#xff1b;这能让 pacman 直接从国内镜像下载预编译包&#xff0c;速度快很多。 编辑文件 /etc/pacman.conf 在最后添加上如下内容 [archlinuxcn] SigLevel Optional TrustedOnly Server https://mirrors.tuna.tsinghua.edu.cn/ar…

作者头像 李华
网站建设 2026/10/12 5:36:41

ShK Toxin;172450-46-3

基本性质中文名称&#xff1a;ShK 毒素&#xff0c;海葵 ShK 钾通道毒素CAS 号&#xff1a;172450-46-3单字母序列&#xff1a;RSCIDTIPKSRCTAFQCKHSMKYRLSFCRKTCGTC三字母序列&#xff1a;Arg-Ser-Cys-Ile-Asp-Thr-Ile-Pro-Lys-Ser-Arg-Cys-Thr-Ala-Phe-Gln-Cys-Lys-His-Ser-M…

作者头像 李华