- Next Greater Node In Linked List
1019. Next Greater Node In Linked List Acceptance 55.9%
NOTE
블로그라기 보다는 생각나는 생각나는 대로 두서없이 적는 낙서장이라고 보면 될것 같다.
2019년 4월 2일 15:40~17:00
문제
- 링크드 리스트가 주어지고,
- 각 노드의 숫자 크기는 무작위
- 배열을 리턴 하는데, 각 인덱스의 노드 보다 뒤에 나오는 큰 수를 리턴
- 그 수보다 큰 수가 없다면 해당 배열 요소 값은 0
생각 흐름 - 무식하게 풀기
- Stack이네..
- 링크드 리스트를 한번 순회하면서 stack에 push
- 다 돌았으면 답이 될 배열 초기화
- 배열의 마지막 값은 무조건 0 이고,
- stack에서 pop 하면서 최대값과 비교해서 작으면 하고 해당 배열 값을 세팅
- 아니면 배열 값은 0 이고 최대값 갱신
- 결과 리턴
- 시간 복잡도 $O(n)$
- 망할… 어쩐지 -_- 너무 쉽다 했어…
- 문제도 잘못 읽고, 예제도 부실하네
- 위 코드는 아래 예제 충족 못함
case : [1,6,5,4,3,2,1,2,3,4,5,6,7] answer : [6,7,6,5,4,3,2,3,4,5,6,7,0]
다시 생각하기
- 리스트를 스택에 쌓은 후 배열 (a)로 변환
- 결과 배열 (res) 생성
for(int i=a.length-2, j=a.length-1; i>=0; i--, j--){ a[j] = stack.pop(); res[i] = nextLarger(a, j, stack.peek()); } //... int nextLarger(int[] a, int s, int target){ int res = 0; for(; s<a.length; s++){ if(target<a[s]){ res = a[s]; break; } } return res; }
2019년 4월 3일 10:02~10:27
- 음… 상당히 느리군…. 123 ms, faster than 26.57%;;
- 사실 stack을 pop했을 때 배열 a의 [j..a.length-1]사이의 값 중 pop한 값보다 작으면 더이상 필요 없어지는 건데….
- a를 배열이 아니고 stack으로 교체해서 2. 작업을 하도록 변경해볼까?
- 많이 빨라졌다. 20 ms, faster than 86.25%
Leave a comment