返回首页

状态机 DP:股票买卖问题

一、面试常考点

1. 状态机思维

把“持有/不持有”等状态拆开建模。

2. 高频变体

最多交易一次、多次、含冷冻期、含手续费。

二、细节介绍

1. 基础状态

hold:当天结束持有股票的最大收益。 cash:当天结束不持有股票的最大收益。

2. 转移

hold = max(hold, cash - price) cash = max(cash, hold + price)(注意临时变量顺序)

三、示例代码

function maxProfit(prices) {
  let hold = -Infinity
  let cash = 0

  for (const p of prices) {
    const prevHold = hold
    hold = Math.max(hold, cash - p)
    cash = Math.max(cash, prevHold + p)
  }

  return cash
}

四、常用应用场景

1. 有状态最优决策

如库存、仓位、任务状态切换优化。

2. 规则变体多的题

状态机建模可扩展性高。