📅  最后修改于: 2023-12-03 15:10:34.631000             🧑  作者: Mango
给定一组股票价格,你可以进行最多两次买卖操作,请计算出最大的利润。
输入: [3,3,5,0,0,3,1,4] 输出: 6 解释: 在第 4 天(股票价格 = 0)的时候买入, 在第 6 天(股票价格 = 3)的时候卖出, 再在第 7 天(股票价格 = 1)的时候买入, 在第 8 天(股票价格 = 4)的时候卖出, 总利润 = (3-0) + (4-1) = 6。
让我们考虑用动态规划的方式解决这个问题。需要三个状态来描述这个问题:
buy1
,第一次买入的最大利润;sell1
,第一次卖出的最大利润;buy2
,第二次买入的最大利润;sell2
,第二次卖出的最大利润;在每一天结束后,我们用以下方式更新这些变量:
最终,我们将返回 sell2
,因为在最后一天,可以比之更大的利润量只能是再次购买并卖出。
def max_profit(prices: List[int]) -> int:
buy1, sell1 = float('inf'), 0
buy2, sell2 = float('inf'), 0
for price in prices:
buy1 = min(buy1, price)
sell1 = max(sell1, price - buy1)
buy2 = min(buy2, price - sell1)
sell2 = max(sell2, price - buy2)
return sell2