題目描述
給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。node
若是你最多隻容許完成一筆交易(即買入和賣出一支股票),設計一個算法來計算你所能獲取的最大利潤。python
注意你不能在買入股票前賣出股票。web
示例1算法
輸入:[7,1,5,3,6,4]輸出:5解釋:在第 2 天(股票價格 = 1)的時候買入,在第 5 天(股票價格 = 6)的時候賣出,最大利潤 = 6-1 = 5 。注意利潤不能是 7-1 = 6, 由於賣出價格須要大於買入價格。
示例2數組
輸入:[7,6,4,3,1]輸出:0解釋:在這種狀況下, 沒有交易完成, 因此最大利潤爲 0。
題解
這是 【買賣股票的最佳時機】 系列題目的第一題。微信
這道題目要求只能買賣一次股票。因此最佳策略必定是挑一個最低的價格買入,再挑一個最高的價格賣出。可是還有另外一個限制條件,那就是你得先買,而後才能賣出去。編輯器
因此咱們只須要枚舉每一個股票,把它看成賣出的那一隻股票,而後只須要求出它以前價格最低的那一隻股票就好了。價格最低的股票能夠用一個變量來進行維護,而後枚舉全部賣出的股票,減去它以前價格最低的那一隻股票,而後和最優答案進行比較,最終就能獲得最多能賺多少錢了。svg
最終答案就是:學習
時間複雜度是 。flex
代碼
python
class Solution: def maxProfit(self, prices: List[int]) -> int: n = len(prices) if n == 0: return 0 minn, res = prices[0], 0 for i in range(1, n): res = max(res, prices[i]-minn) minn = min(minn, prices[i]) return res
做者簡介:godweiyang,知乎同名,華東師範大學計算機系碩士在讀,方向天然語言處理與深度學習。喜歡與人分享技術與知識,期待與你的進一步交流~
個人微信:weiyang792321264。有任何問題均可以在評論區留言,也歡迎加我微信深刻溝通~
本文分享自微信公衆號 - 算法碼上來(GodNLP)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。