본문 바로가기

릿코드

121. Best Time to Buy and Sell Stock

https://leetcode.com/problems/best-time-to-buy-and-sell-stock/

1) Original : 기본 아이디어는 아래의 코드에서부터 시작된다. (이 코드를 돌리면 시간 초과가 뜬다)
                    1, 2, 3, 4 가 있다면,
                    1 vs max(2,3,4) = 4 - 1
                    2 vs max(3,4)  = 4 - 2
                    3 vs max(4)  = 4 - 3
                    결과 값들의 max를 MaxProfit으로 반환한다.

                  하지만 이 코드는 max를 구하는 과정(j loop)에서 겹치는 연산을 불필요하게 반복한다는 것을 볼 수 있다.
2) Optimization 1 :

Max를 maxlist에 넣고, 새로운 원소가 추가될 때, maxlist[i+1] = max(maxlist[i] , prices[i+1]) 을 해준다. 여기서 max연산을 역순으로 해주어야해서, 실제로는 maxlist[i] = max(maxlist[i+1] , prices[i]) 을 하게 된다.

드디어 시간초과가 뜨지 않는다. 그러나 350 ms 라는 많은 시간이 걸린다.

3) Optimization 2
생각해보니 maxlist를 앞서 계산해주어야할 필요가 없다. 따라서 포문을 합친다.

시간이 131 ms로 단축되었다. 

4) Optimization 3
또 생각해보니 모든 maxlist를 가지고 있을 필요가 없다. 다만 바로 이전의 max 값만 가지고 있으면 된다.

대략 0.6 MB 정도 공간이 줄어들었다. 

'릿코드' 카테고리의 다른 글

264. Ugly Number II  (1) 2022.09.21
409. Longest Palindrome  (1) 2022.09.20
142. Linked List Cycle II  (0) 2022.09.20
876. Middle of the Linked List  (0) 2022.09.20
206. Reverse Linked List  (2) 2022.09.20