
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 |