買賣股票相關演算法-動態規劃-python

tw_nlp發表於2024-05-23

要求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

備註:這個題跟前面一樣,也是遍歷一次,不要想多,如果有利潤就賣掉,就可以解決,後面驗證,這個思路沒問題。

相關文章