문제

https://leetcode.com/problems/best-time-to-buy-and-sell-stock/description/?envType=study-plan-v2&envId=top-interview-150

 

LeetCode - The World's Leading Online Programming Learning Platform

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

저점(buy), 고점(sell)을 변수로 두고 생각했는데 O(n^2) 밖에 안떠올랐고 Discussion 열어봤다.

 

저점이 바뀔 때,

1. 저점 뒤에(저점보다 늦은 시간에) 고점이 온다면, 이전의 저점이 더 큰 profit을 볼 일은 없다.

2. 저점 앞에 고점이 있었다면, 이전 저점과 고점에 따른 profit을 기억해둔다. 그리고 고점은 저점 뒤에 있어야 하므로 바뀐 저점에 고점을 같이 위치시킨다.

 

1을 확정하고 생각을 풀어나가면 떠올랐을 거 같다.

    def maxProfit(self, prices: List[int]) -> int:
        buy, sell, profit = prices[0], prices[0], 0
        for i in range(1, len(prices)):
            val = prices[i]
            if val < buy:
                profit = max(profit, sell - buy)
                buy = val
                sell = val
            elif val > sell and val > buy:
                sell = val

        return max(profit, sell-buy)

'Algorithm' 카테고리의 다른 글

릿코드 2. Add Two Numbers, 49. Group Anagrams  (0) 2024.02.17
릿코드 134. Gas Station, 135. Candy  (2) 2024.02.09
릿코드 238. Product of Array Except Self  (0) 2024.02.06
릿코드 45. Jump Game II  (0) 2024.02.04
릿코드 55. Jump Game  (2) 2024.02.02