Leetcode刷題:劍指offer【面試題63 股票的最大利潤】

【面試題63 股票的最大利潤】

面試題63:股票的最大利潤:假設把某股票的價格按照時間先後順序存儲在數組中,請問買賣該股票一次可能獲得的最大利潤是多少?

思路:動態規劃。

  • 明確狀態:本題唯一的變量就是“能夠獲取的最大利潤”
  • dp 數組dp[i] 表示在第 i 天選擇賣出,能夠獲取的最大利潤
  • 明確選擇:假設在第 i 天賣出,那麼可以選擇在 0~i-1 的任意一天買入,原則是能夠獲得最大利潤
  • 狀態間轉移關係:不論第 i 天的股票價格是否高於前一天,都有以下狀態轉移關係:dp[i] = max(0, prices[i]-(prices[i-1]-dp[i-1])),利用 prices[i-1]-dp[i-1] 可以計算得到前 i-1 天內的最低股票價格
  • 確定 base case:當 i=0 時,利潤爲 0

注意到狀態轉移公式 dp[i] 僅和 dp[i-1] 有關,所以不需要真的建立 dp 數組,用變量 precur 來維護即可。

時間複雜度O(n)O(n)
空間複雜度O(1)O(1)

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        if not prices: return 0
        n = len(prices)
        pre, m = 0, 0
        for i in range(1, n):
            cur = max(0, prices[i]-(prices[i-1]-pre))
            pre = cur
            m = cur if cur > m else m
        return m
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章