這題沒有涵蓋手續費,所以變得超簡單。
在價格遞增的時候不斷獲利,在價格遞減的時候不出手。所謂獲利就是一買一賣且賺錢的。
爬到價格巔峰的過程,每個階梯的高度加總就是最高到最低的差距,於是只要不斷地後減前再加到獲利。
當價格走跌時,後減前就變成負值,如果是負值就不做買賣,收益為 0。
整理之後,後減前只要 > 0 就加入,< 0 就跳過。
判斷相當簡單,於是可以濃縮成一句就解決掉了:
class Solution: def maxProfit(self, prices: List[int]) -> int: return sum([max(prices[i]-prices[i-1], 0) for i in range(1,len(prices))])
不過真的要買賣,當然是減少進場次數,買要判斷沒有持有,賣要判斷有持有才能進行。
(真實買賣的情況下,減少進場次數是方向,不管有沒有持有,都可以買賣。
class Solution: def maxProfit(self, prices: List[int]) -> int: profit = 0 if prices: isBuy, cost = 0, 0 lastPrice = prices[0] for i in range(1, len(prices)): nowPrice = prices[i] if lastPrice <= nowPrice and not isBuy: cost = lastPrice isBuy = 1 elif lastPrice > nowPrice and isBuy: profit += lastPrice - cost isBuy = 0 lastPrice = nowPrice if isBuy: profit += lastPrice - cost return profit