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) => {
18
18
// 일단 연속되는 배열에서는 가장 최솟값을 찾음
19
19
if ( ! set . has ( v - 1 ) ) {
20
20
let cnt = 1 ;
21
-
22
21
// 연속되는 배열에서 가장 긴 배열을 저장
23
22
while ( set . has ( v + cnt ) ) {
24
23
cnt += 1 ;
25
- longest = longest < cnt ? cnt : longest ;
26
24
}
25
+ longest = Math . max ( longest , cnt ) ;
27
26
}
28
27
} ) ;
29
28
Original file line number Diff line number Diff line change 1
1
/**
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)
6
6
*
7
7
* 공간 복잡도: 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
11
11
*/
12
12
const topKFrequent = ( nums , k ) => {
13
- // 각 숫자의 빈도수를 저장하는 객체
14
- const countNums = { } ;
13
+ // nums 요소 : 요소의 갯수
14
+ const map = { } ;
15
+ // 요소의 갯수 : Set{ nums 요소 }
16
+ const bucket = [ ] ;
17
+
18
+ const result = [ ] ;
15
19
16
- // nums 배열을 순회하며 각 숫자의 빈도수를 카운트
17
20
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
+ }
20
26
}
21
27
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
+ }
25
35
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 ;
29
43
}
30
44
31
- return answer ;
45
+ return result ;
32
46
} ;
You can’t perform that action at this time.
0 commit comments