要求1:
給定一個陣列 prices
,它的第 i
個元素 prices[i]
表示一支給定股票第 i
天的價格。
你只能選擇 某一天 買入這隻股票,並選擇在 未來的某一個不同的日子 賣出該股票。設計一個演算法來計算你所能獲取的最大利潤。
返回你可以從這筆交易中獲取的最大利潤。如果你不能獲取任何利潤,返回 0
。
程式碼如下:
時間複雜度O(n)
空間複雜度O(1)
class Solution: def maxProfit(self, prices: List[int]) -> int: minprice=float('inf') maxprice=0 for p_i in prices: minprice=min(minprice,p_i) maxprice=max(maxprice,p_i-minprice) return maxprice
備註:遍歷一次,找最小買入,找最大利潤。
要求2:
給你一個整數陣列 prices
,其中 prices[i]
表示某支股票第 i
天的價格。
在每一天,你可以決定是否購買和/或出售股票。你在任何時候 最多 只能持有 一股 股票。你也可以先購買,然後在 同一天 出售。
返回 你能獲得的 最大 利潤 。
示例 1:
輸入:prices = [7,1,5,3,6,4] 輸出:7 解釋:在第 2 天(股票價格 = 1)的時候買入,在第 3 天(股票價格 = 5)的時候賣出, 這筆交易所能獲得利潤 = 5 - 1 = 4 。 隨後,在第 4 天(股票價格 = 3)的時候買入,在第 5 天(股票價格 = 6)的時候賣出, 這筆交易所能獲得利潤 = 6 - 3 = 3 。 總利潤為 4 + 3 = 7 。
示例 2:
輸入:prices = [1,2,3,4,5] 輸出:4 解釋:在第 1 天(股票價格 = 1)的時候買入,在第 5 天 (股票價格 = 5)的時候賣出, 這筆交易所能獲得利潤 = 5 - 1 = 4 。 總利潤為 4 。
示例 3:
輸入:prices = [7,6,4,3,1] 輸出:0 解釋:在這種情況下, 交易無法獲得正利潤,所以不參與交易可以獲得最大利潤,最大利潤為 0 。
程式碼如下:
時間複雜度O(n)
空間複雜度O(1)
class Solution: def maxProfit(self, prices: List[int]) -> int: sum=0 for i in range(len(prices)-1): if prices[i]<prices[i+1]: sum+=(prices[i+1]-prices[i]) return sum
備註:這個題跟前面一樣,也是遍歷一次,不要想多,如果有利潤就賣掉,就可以解決,後面驗證,這個思路沒問題。