File tree Expand file tree Collapse file tree 2 files changed +34
-21
lines changed
longest-consecutive-sequence Expand file tree Collapse file tree 2 files changed +34
-21
lines changed Original file line number Diff line number Diff line change @@ -18,12 +18,11 @@ const longestConsecutive = (nums) => {
1818 // 일단 연속되는 배열에서는 가장 최솟값을 찾음
1919 if ( ! set . has ( v - 1 ) ) {
2020 let cnt = 1 ;
21-
2221 // 연속되는 배열에서 가장 긴 배열을 저장
2322 while ( set . has ( v + cnt ) ) {
2423 cnt += 1 ;
25- longest = longest < cnt ? cnt : longest ;
2624 }
25+ longest = Math . max ( longest , cnt ) ;
2726 }
2827 } ) ;
2928
Original file line number Diff line number Diff line change 11/**
2- * 시간 복잡도: O(n log n )
3- * - nums 배열 순회하며 빈도수 카운트: O(n)
4- * - 빈도수 기준 내림차순 정렬: O(n log n)
5- * - 상위 k개 선택: O(k) -> k는 n보다 작으므로 무시
2+ * 시간 복잡도: O(n)
3+ * - nums 순회하며 map 생성 O(n)
4+ * - map 순회하며 bucket 생성 O(n)
5+ * - bucket 순회하며 결과 찾음 O(n)
66 *
77 * 공간 복잡도: O(n)
8- * - countNums 객체: 최악의 경우 모든 숫자가 다른 경우 O(n)
9- * - sortedCountNums 배열: countNums와 동일한 크기 O(n)
10- * - answer 배열: k 크기이지만 k는 n보다 작으므로 무시
8+ * - map O(n)
9+ * - bucket O(n)
10+ * - result k
1111 */
1212const topKFrequent = ( nums , k ) => {
13- // 각 숫자의 빈도수를 저장하는 객체
14- const countNums = { } ;
13+ // nums 요소 : 요소의 갯수
14+ const map = { } ;
15+ // 요소의 갯수 : Set{ nums 요소 }
16+ const bucket = [ ] ;
17+
18+ const result = [ ] ;
1519
16- // nums 배열을 순회하며 각 숫자의 빈도수를 카운트
1720 for ( let i = 0 ; i < nums . length ; i += 1 ) {
18- const num = nums [ i ] ;
19- countNums [ num ] = ! countNums [ num ] ? 1 : countNums [ num ] + 1 ;
21+ if ( map [ nums [ i ] ] ) {
22+ map [ nums [ i ] ] += 1 ;
23+ } else {
24+ map [ nums [ i ] ] = 1 ;
25+ }
2026 }
2127
22- // 빈도수를 기준으로 내림차순 정렬
23- const sortedCountNums = Object . entries ( countNums ) . sort ( ( a , b ) => b [ 1 ] - a [ 1 ] ) ;
24- const answer = [ ] ;
28+ for ( let [ num , freq ] of Object . entries ( map ) ) {
29+ if ( bucket [ freq ] ) {
30+ bucket [ freq ] = bucket [ freq ] . add ( num ) ;
31+ } else {
32+ bucket [ freq ] = new Set ( ) . add ( num ) ;
33+ }
34+ }
2535
26- // 상위 k개의 숫자를 answer 배열에 저장
27- for ( let i = 0 ; i < k ; i += 1 ) {
28- answer [ i ] = Number ( sortedCountNums [ i ] [ 0 ] ) ;
36+ for ( let i = bucket . length - 1 ; i >= 0 ; i -= 1 ) {
37+ if ( bucket [ i ] ) {
38+ // string을 number로 변환
39+ const value = Array . from ( bucket [ i ] , Number ) ;
40+ result . push ( ...value ) ;
41+ }
42+ if ( result . length === k ) break ;
2943 }
3044
31- return answer ;
45+ return result ;
3246} ;
You can’t perform that action at this time.
0 commit comments