难度:困难
题目描述
思路
动态规划
1)定义状态
未进行操作;只进行一次买操作buy1;进行一次买和一次卖操作,即完成一笔交易sell1;进行第二次买操作buy2;完成两笔交易sell2。
2)转移方程
第i天不进行操作,或者第i-1天未进行操作,第i天以prices[i]价格买入股票
buy1=max{buy1′,−prices[i]}=max{buy1,−prices[i]}
第i天不进行操作,或者第i-1天只进行买操作,第i天以prices[i]价格卖出股票
sell1=max{sell1′,buy1′+prices[i]}=max{sell1,buy1+prices[i]}
第i天不进行操作,或者第i-1天完成一笔交易,第i天以prices[i]价格买入股票
buy2=max{buy2′,sell1′−prices[i]}=max{buy2,sell1−prices[i]}
第i天不进行操作,或者第i-1天进行第二次买操作,第i天以prices[i]价格卖出股票
sell2=max{sell2′,buy2′+prices[i]}=max{sell2,buy2+prices[i]}
3)初始状态
buy1=−prices[0];sell1=0;buy2=−prices[0];sell2=0
代码
class Solution:
def maxProfit(self, prices: List[int]) -> int:
n = len(prices)
buy1 = buy2 = -prices[0]
sell1 = sell2 = 0
for i in range(1, n):
buy1 = max(buy1, -prices[i])
sell1 = max(sell1, buy1 + prices[i])
buy2 = max(buy2, sell1 - prices[i])
sell2 = max(sell2, buy2 + prices[i])
return sell2
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-iii/solution/mai-mai-gu-piao-de-zui-jia-shi-ji-iii-by-wrnt/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。