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

LeetCode 121 122:股票买卖问题(DP 对比题解)✅

LeetCode 121 & 122:股票买卖问题(DP 对比题解)✅

📌 题目列表

题号题目限制
121买卖股票的最佳时机I只能交易1 次
122买卖股票的最佳时机II可以交易无限次

📖 内容概要

给定一个数组prices,其中prices[i]是第i天的股票价格。
你需要选择买入和卖出时机,使利润最大。

  • 121:只能买卖一次
  • 122:可以多次买卖(同一天不能同时买卖)

✅ 动态规划
✅ 状态机思想
✅ 面试高频题


💡 统一 DP 定义(两题通用)

dp[i][0]=第 i 天结束时,不持有股票的最大利润 dp[i][1]=第 i 天结束时,持有股票的最大利润

🔁 状态转移(核心)

不持有股票dp[i][0]

dp[i][1]=max(前一天就不持有,前一天持有+今天卖出)

✅ 两题完全一致


持有股票dp[i][1]

题目转移方程含义
121max(dp[i-1][1], -prices[i])只能买一次
122max(dp[i-1][1], dp[i-1][0] - prices[i])可以反复买

这是两道题的唯一区别


✅ 121 题:只能买卖一次(AC 代码)

classSolution{publicintmaxProfit(int[]prices){intlen=prices.length;int[][]dp=newint[len][2];dp[0][0]=0;// 不持股dp[0][1]=-prices[0];// 持股for(inti=1;i<len;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],-prices[i]);// 只能买一次}returndp[len-1][0];}}

✅ 关键点

  • 第二次买入时:
    • 之前不能有利润
    • 只能是-prices[i]

✅ 122 题:可以无限交易(AC 代码)

classSolution{publicintmaxProfit(int[]prices){intlen=prices.length;int[][]dp=newint[len][2];dp[0][0]=0;dp[0][1]=-prices[0];for(inti=1;i<len;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][0]-prices[i]);}returndp[len-1][0];}}

✅ 关键点

  • 再次买入时:
    • 使用的是之前不持股的最大利润

🔍 两题核心差异对比

对比项121(一次)122(无限次)
是否可多次买卖
持有状态转移-prices[i]dp[i-1][0] - prices[i]
DP 含义第一次买入任意次买入
难度中等简单

⏱️ 复杂度分析

指标复杂度
时间复杂度O(n)
空间复杂度O(n)(可优化为 O(1))

🚀 空间优化(通用)

inthold=-prices[0];intcash=0;for(inti=1;i<prices.length;i++){intprevCash=cash;cash=Math.max(cash,hold+prices[i]);hold=Math.max(hold,prevCash-prices[i]);}returncash;

✅ 一句话总结

121 限制“只能买一次”,122 允许“反复买卖”,区别仅在于持有股票的转移方程。

http://www.gsyq.cn/news/1477618.html

相关文章:

  • 2026液压升降机专业品牌排行:广州液压货梯/广州直顶式升降机/广州直顶式货梯/广州简易升降机/广州简易升降货梯/选择指南 - 优质品牌商家
  • Mythos门控释放机制:大模型结构化推理的能力治理实践
  • 别再死记硬背了!用Python+NumPy可视化理解冲激函数如何‘抓取’信号采样点
  • 新手入门数据分析:用快马平台生成可交互代码,理解spsspro每一步操作原理
  • 手把手教你用MySQL命令行备份与恢复Bugzilla数据(含常见报错解决)
  • 2026年6月商标购买网站哪家好,闲置转让商标/商标注册/商标转让查询/热门商标直卖/商标品牌,商标购买公司哪个便宜 - 品牌推荐师
  • CSDN AI数字营销素材接入全攻略(私有素材调用白皮书)
  • AI编程14-性能优化与AI辅助调优:让AI帮你找出代码瓶颈,响应速度提升10倍
  • 别再只会source ~/.bashrc了!Anaconda3环境变量配置的三种正确姿势与一个常见坑
  • 黄厝网红打卡小吃实测:厦门姜母鸭特产、厦门小吃店、厦门旅游伴手礼、厦门旅游特产、厦门特产店、厦门特色小吃店、厦门网红打卡小吃选择指南 - 优质品牌商家
  • Scrum价值放大:从流程执行到客户可验证成果的实战指南
  • 告别繁琐配置:5分钟搞定ESP32-S3摄像头连接阿里云OSS,并推送到微信小程序
  • TensorFlow Callbacks 实战指南:构建稳定可监控的生产级训练流程
  • Python重试机制实战:Tenacity库的指数退避与异步重试设计
  • D3D8to9终极指南:3步让经典游戏在现代Windows系统完美运行
  • 后端技术14-单一架构已死?混合架构才是2026年的正确打开方式,单体+微服务+Serverless:我们的三层架构实战
  • Java项目自动化构建与测试实践包:Jenkins流水线配置+Ant脚本+JUnit示例
  • S32K3 eMIOS实战:用MCAL配置PWM和输入捕获(ICU),附周期计算避坑指南
  • CSDN AI选题系统行业词适配能力首曝:支持87个标准行业分类,但仅对认证企业开放动态词表权限(附申请通道)
  • AI写作已过时?真正决胜的是“发布前最后90秒”——CSDN TOP100博主不愿说的发布时间窗口算法
  • 2026年质量好的啤酒设备优质厂家汇总推荐 - 品牌宣传支持者
  • 从手机拍照到AR眼镜:一文搞懂焦距、物距、像距的实战关系(附常见场景对照表)
  • 从PLC到SCADA:一个真实Modbus RTU通讯故障的排查日记(附Wireshark抓包分析)
  • 20款降AIGC软件实测:论文降AI率靠谱选择指南
  • 告别复杂编码!用GNURadio + VLC实现无线视频‘直播’的极简方案(附避坑指南)
  • 当‘切尔西的名流’遇见GitHub:从一篇小说看开源项目维护者与贡献者的沟通艺术
  • 告别内存泄漏!C#集成Halcon引擎调用.hdvp外部函数的完整避坑指南
  • 用Simulink+Simscape复现《Modern Robotics》经典案例:两连杆机器人轨迹跟踪实战
  • LLaMA开源模型落地实战:量化、推理与许可证避坑指南
  • 实战指南:基于快马平台与echobird构建实时互动在线课堂系统