leetcode123. Best Time to Buy and Sell Stock III

題目大意是給你一些股價,選擇買入和賣出,使賺得最多,只能買入後賣出,並且只能買賣兩次。
雙指針和動態規劃的思想。
一個指針從前往後指,記錄下從開頭到當前的賺最多的一次買賣
一個指針從後往前,記錄下從當前到數組末尾賺的最多的一次買賣
同時加上當前從前往後的買賣,與ans進行比較。

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        if len(prices)==0:
            return 0
      
       
        pre_min=prices[0]
        pre_max=prices[-1]
        left=[0]*len(prices)
        right=0
        ans=0
        for i in range(1,len(prices)):
                pre_min=min(prices[i],pre_min)
                left[i]=max(prices[i]-pre_min,left[i])
        for i in range(len(prices)-2,-1,-1):
                pre_max=max(prices[i],pre_max)
                right=max(pre_max-prices[i],right)
                ans=max(left[i]+right,ans)

        return ans
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章