股票冷冻期问题解析 | 豆包MarsCode AI刷题

139 阅读3分钟

题目解析

在本题中,小R面临一个动态规划问题,核心在于如何最大化股票交易利润,并遵守如下限制:

  1. 可以多次买卖股票。
  2. 必须先卖出当前股票后,才能进行下一次购买。
  3. 每次卖出股票后,有一天的冷冻期,在此期间不能买入股票。

题目考察的主要是动态规划中的状态设计与状态转移:

  • 状态变量设计:如何记录买入、卖出和冷冻期的状态。
  • 转移逻辑:如何根据前一天的状态和当前股票价格,决定买入、卖出或进入冷冻期的操作。

知识总结

  1. 动态规划的核心概念

    • 将问题分解为子问题。
    • 通过状态转移方程将子问题的解递推到最终解。
  2. 状态定义与转移

    • 本题引入三个状态:

      • 持有股票(hold) : 截至当前天,持有股票的最大收益。
      • 卖出股票(sold) : 截至当前天,卖出股票的最大收益。
      • 冷冻期(cooldown) : 截至当前天,进入冷冻期的最大收益。
    • 转移方程:

      • hold=max⁡(hold,cooldown−prices[i])hold=max(hold,cooldown−prices[i])
      • sold=hold+prices[i]sold=hold+prices[i]
      • cooldown=max⁡(cooldown,sold)cooldown=max(cooldown,sold)
  3. 实现动态规划的步骤

    • 明确问题的目标(最大化收益)。
    • 定义状态变量,找到它们的物理意义。
    • 写出状态转移方程。
    • 初始化状态。
    • 最终结果根据问题要求,取几个状态的最大值。
  4. 时间与空间复杂度

    • 时间复杂度:O(n)O(n)
    • 空间复杂度:O(1)O(1)

学习计划

目标:掌握动态规划思想,能灵活运用在类似“买卖股票”类型的问题中。

  1. 第一阶段(基础阶段,1周)

    • 学习动态规划的基本概念与应用场景。

    • 练习简单的动态规划问题,如斐波那契数列、最小路径和问题。

    • 推荐资源:

      • 《动态规划初探》专题文章或课程。
      • LeetCode简单题目:70. 爬楼梯121. 买卖股票的最佳时机
  2. 第二阶段(进阶阶段,2周)

    • 专注于股票问题,熟悉交易规则对动态规划的影响。
    • 专项练习:122. 买卖股票的最佳时机II(无限交易),309. 最佳买卖股票时机含冷冻期(本题)。
    • 模拟状态定义和转移,画出状态转移图。
  3. 第三阶段(实战阶段,1-2周)

    • 综合练习动态规划问题,注重思考问题的状态定义和转移。

    • 复习多种股票问题的状态定义(如交易次数限制、手续费等)。

    • 推荐挑战:

      • 123. 买卖股票的最佳时机III(最多两笔交易)
      • 188. 买卖股票的最佳时机IV(最多 kk 笔交易)
      • 714. 买卖股票的最佳时机含手续费
  4. 复盘与总结(1周)

    • 对比各种动态规划问题,归纳解题思路。
    • 总结常见问题的代码模板。

工具应用

  1. 代码调试工具

    • 使用 IntelliJ IDEA 或 Eclipse 编写和调试 Java 代码。
    • 借助 LeetCode 的在线编译器测试用例。
  2. 算法可视化工具

    • 推荐使用 Python 的 Matplotlib 或 在线可视化工具(如 VisuAlgo)画出动态规划的状态转移过程,帮助理解冷冻期规则。
  3. 知识管理工具

    • 使用 Notion 或 Obsidian 整理学习笔记。
    • 记录学习计划与解题思路,方便复盘。
  4. AI 辅助

    • 利用 MarsCode AI 或其他 AI 工具优化代码、解释问题难点。
    • 使用 LeetCode Discuss 或 Stack Overflow 寻求解决方案。