leetcode/notes/src/stock.md

1.8 KiB

股票问题

122. 买卖股票的最佳时机 II

  • dp[i][0] 表示第 i 天持有股票情况下的资产总额,dp[i][1] 表示第 i 天没有持有股票情况下的资产总额。这里的资产不包括股票本身的价值,只包括自身的现金,如果你在第 1 天买入了股票,那么你的资产总额是 -prices[0]
  • 递推公式:
    • 我们先来讨论 dp[i][0],也就是第 i 天持有股票时的资产,分两种情况
      • 第 i - 1 天持有股票,那么第 i 天的资产就是 dp[i - 1][0]
      • 第 i - 1 天没持有股票,那么第 i 天的资产就是 dp[i - 1][1] - prices[i]
      • 取这两者的最大值即为第 i 天的最大资产 dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - prices[i])
    • 同理 dp[i][1] 也分两种情况
      • 第 i - 1 天持有股票,那么第 i 天的资产就是 dp[i - 1][0] + prices[0]
      • 第 i - 1 天没持有股票,那么第 i 天的资产就是 dp[i - 1][1]
      • 取这两者的最大值即为第 i 天的最大资产 dp[i][1] = max(dp[i - 1][0] + prices[i], dp[i - 1][1])
  • 初始化
    • dp[0][0] = -prices[0]
    • dp[0][1] = 0
  • 遍历顺序:从前往后

123.买卖股票的最佳时机III

  • dp[i][j][k] 是第 i 笔交易中,第 j 天,是否持有股票时的总资产
  • 递推公式:
    • dp[0][i][0] = max(dp[0][i - 1][0], -prices[i])
    • dp[0][i][1] = max(dp[0][i - 1][1], dp[0][i][0] + prices[i])
    • dp[1][i][0] = max(dp[1][i - 1][0], dp[0][i - 1][1] - prices[i])
    • dp[1][i][1] = max(dp[1][i - 1][1], dp[0][i - 1][0] + prices[i])
  • 初始化:
    • dp[i][0][0] = -prices[0]
    • dp[i][0][1] = 0
  • 遍历顺序:
    • 先遍历 i
    • 再遍历 jk