leetcode熱題100-121. 買賣股票的最佳時機

121. 買賣股票的最佳時機

題目描述

給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。
如果你最多隻允許完成一筆交易(即買入和賣出一支股票一次),設計一個算法來計算你所能獲取的最大利潤。
注意:你不能在買入股票前賣出股票。

在這裏插入圖片描述

題解

1.方法:暴力法

我們需要找出給定數組中兩個數字之間的最大差值(即,最大利潤)。此外,第二個數字(賣出價格)必須大於第一個數字(買入價格)。
形式上,對於每組 ii 和 jj(其中 j > ij>i)我們需要找出 max(prices[j]−prices[i])。

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        ans = 0
        for i in range(len(prices)):
            for j in range(i + 1, len(prices)):
                ans = max(ans, prices[j] - prices[i])
        return ans

複雜度分析

時間複雜度:O(n^2)
空間複雜度:O(1)。只使用了常數個變量。

2. 遍歷法

顯然,如果我們真的在買賣股票,我們肯定會想:如果我是在歷史最低點買的股票就好了!
我們只要用一個變量記錄一個歷史最低價格 minprice,假設第一個是最低點,然後比較第i天的最低價,我們在第 i 天賣出股票能得到的利潤就是 prices[i] - minprice。或者0

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        if (len(prices)<=1):
            return 0
        min_p=prices[0]
        max_p=0
        for i in range(len(prices)):
            min_p= min(min_p,prices[i])
            max_p= max(max_p,prices[i]-min_p)
        return max_p
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章