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