--- image: https://leetcode.com/static/images/LeetCode_Sharing.png tags: leetcode --- # Week.4.EZ [121. Best Time to Buy and Sell Stock] --- - 給一List, 找出最佳買賣日的獲利值 --- - 剛開始使用暴力法, 因為List會跑n^2次, 數值大就會Timeout - 用雙指針的方法就很不錯, 只需跑一次紀錄, 也稱sliding window --- ```python! class Solution: def maxProfit(self, prices: List[int]) -> int: # 給一List, 找出最賺最多的買進賣出 # Brutal: 每日減去該日之前最小值,得結果 O(n^2) # res = [v-min(prices[:i+1]) for i,v in enumerate(prices)] # return max(res) # 果不其然 Time Limit Exceeded # 2pointer: l,r l = r = res = 0 n = len(prices) while r < n: profit = prices[r] - prices[l] print(profit) if profit < 0: # l最多停在r相同, 跌到區域新低就停 l += 1 else: # 只要正值就比較, 取最大 res = max(res, profit) r += 1 return res ``` [121. Best Time to Buy and Sell Stock]:https://leetcode.com/problems/best-time-to-buy-and-sell-stock/description/