题目链接: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]
