思路:由於可以做多次交易,所以相當於求多個階段的收益,如下圖,例如 8大於1,所以就開始結算之前的收益。如果8的後面是9的話,比8大,那就繼續往前,直接下一個狀態比其小,纔開始結算收益。
class Solution:
def maxProfit(self, prices) -> int:
if prices == []: return 0
max_price = prices[0]
min_prices = prices[0]
profit = 0
n = len(prices)
for i in range(n):
if max_price > prices[i]:
profit += (max_price-min_prices)
max_price = prices[i]
min_prices = prices[i]
else:
max_price = prices[i]
min_prices = min(min_prices, prices[i])
if i == n-1:
profit += (max_price - min_prices)
return profit
l=[6,2,8,1,5]
ss = Solution()
res = ss.maxProfit(l)
print(res) #10
時間複雜度:O(N) 空間複雜度:O(1)