劍指offer系列-面試題63. 股票的最大利潤(python)

1. 題目

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

2. 解題思路

詳情見 面試題63. 股票的最大利潤(動態規劃,清晰圖解)

當前的最大利潤 = max(之前的最大利潤, 當前price-之前的最小值)

3. 代碼實現

3.1

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        """
        1. 動態規劃,有些類似於最大子數組和這類問題
            1)記錄之前的最大利潤;2)記錄之前的最小值位置
        """
        lirun = 0 # 記錄最大利潤
        min_index = 0 # 記錄之前的最小值下標

        for i in range(1, len(prices)):
            temp = prices[i] - prices[min_index]
            if temp < 0: min_index = i # 更新最小值下標
            if temp > lirun:
                lirun = temp # 更新最大利潤
            

        return lirun

3.2 優化

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        cost, profit = float("+inf"), 0
        for price in prices:
            cost = min(cost, price)
            profit = max(profit, price - cost)
        return profit

作者:jyd
鏈接:https://leetcode-cn.com/problems/gu-piao-de-zui-da-li-run-lcof/solution/mian-shi-ti-63-gu-piao-de-zui-da-li-run-dong-tai-2/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

4. 總結

5. 參考文獻

[1] 劍指offer叢書
[2] 劍指Offer——名企面試官精講典型編程題

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