每日算法系列【LeetCode 121】買賣股票的最佳時機

題目描述

給定一個數組,它的第 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源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索