题目链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-iii/
难度:困难
描述:
给定一个数组,它的第 i
个元素是一支给定的股票在第 i
天的价格。
设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
题解
class Solution:
def maxProfit(self, prices: List[int]) -> int:
n = len(prices)
r = [[0] * 5 for _ in range(n)]
# 5 conditions(第i天结束时):
# 0:什么都没做
# 1:第一次买入
# 2:第一次卖出
# 3:第二次买入
# 4:第二次卖出
r[0][1] = -prices[0]
r[0][3] = -prices[0]
for i in range(1, n):
r[i][1] = max(r[i-1][1], r[i-1][0] -prices[i])
r[i][2] = max(r[i-1][2], r[i-1][1] + prices[i])
r[i][3] = max(r[i-1][3], r[i-1][2] - prices[i])
r[i][4] = max(r[i-1][4], r[i-1][3] + prices[i])
return r[n-1][4]