题目链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-iii/
难度:困难

描述:
给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

题解

  1. class Solution:
  2. def maxProfit(self, prices: List[int]) -> int:
  3. n = len(prices)
  4. r = [[0] * 5 for _ in range(n)]
  5. # 5 conditions(第i天结束时):
  6. # 0:什么都没做
  7. # 1:第一次买入
  8. # 2:第一次卖出
  9. # 3:第二次买入
  10. # 4:第二次卖出
  11. r[0][1] = -prices[0]
  12. r[0][3] = -prices[0]
  13. for i in range(1, n):
  14. r[i][1] = max(r[i-1][1], r[i-1][0] -prices[i])
  15. r[i][2] = max(r[i-1][2], r[i-1][1] + prices[i])
  16. r[i][3] = max(r[i-1][3], r[i-1][2] - prices[i])
  17. r[i][4] = max(r[i-1][4], r[i-1][3] + prices[i])
  18. return r[n-1][4]