File tree Expand file tree Collapse file tree
longest-consecutive-sequence Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ /**
2+ dp 배열을 만들고 각 원소 순서에서 최대의 값을 계산, 리턴한다
3+
4+ 시간복잡도
5+ O(N) : 단일 순회
6+
7+ 공간복잡도
8+ O(N) : dp 배열
9+ */
10+
11+ function rob ( nums : number [ ] ) : number {
12+ const dp = [ ]
13+
14+ for ( let i = 0 ; i < nums . length ; i ++ ) {
15+ if ( i < 1 ) {
16+ dp [ i ] = nums [ i ]
17+ } else if ( i < 2 ) {
18+ dp [ i ] = Math . max ( dp [ i - 1 ] , nums [ i ] )
19+ } else {
20+ dp [ i ] = Math . max ( dp [ i - 2 ] + nums [ i ] , dp [ i - 1 ] )
21+ }
22+ }
23+
24+ return dp . at ( - 1 )
25+ }
Original file line number Diff line number Diff line change 1+ /**
2+ nums를 Set으로 만들어서 중복을 제거하고 순회하면서 시작점(n-1이 Set에 없는 수)을 찾아 연속된 수를 찾아가며 length를 계산한다.
3+ 시작점이 아닌 num(set에 num-1이 있는 경우)는 순회하지 않는다.
4+
5+ 시간복잡도
6+ O(N) : 이중 반복문이지만 시작점에서만 탐색하므로 깊은 중복 순회가 없음
7+ */
8+
9+ function longestConsecutive ( nums : number [ ] ) : number {
10+ if ( nums . length === 0 ) return 0
11+ const numSet = new Set ( nums )
12+ let result = 1
13+
14+ for ( let num of numSet ) {
15+ if ( numSet . has ( num - 1 ) ) {
16+ continue
17+ }
18+
19+ let next = num + 1
20+ let count = 1
21+ while ( numSet . has ( next ) ) {
22+ count += 1
23+ next += 1
24+ }
25+
26+ result = Math . max ( result , count )
27+ }
28+
29+ return result
30+ }
Original file line number Diff line number Diff line change 1+ /**
2+ nums를 순회하며 {[num]: 등장횟수} 형태의 데이터로 바꾸고, 순회가 끝난후
3+ 해당 데이터를 등장횟수 기준으로 내림차순 정렬하여 상위 k개를 리턴한다
4+
5+ O(N)
6+ 시간복잡도 : O(NlogN)
7+ nums 순회 - O(N), 객체 배열화 - O(N), 정렬 - O(NLogN) 도합 O(NLogN)
8+ */
9+
10+ function topKFrequent ( nums : number [ ] , k : number ) : number [ ] {
11+ const countObj : Record < number , number > = { }
12+
13+ for ( let num of nums ) {
14+ if ( num in countObj ) {
15+ countObj [ num ] += 1
16+ } else {
17+ countObj [ num ] = 1
18+ }
19+ }
20+
21+ const countArr = Object . entries ( countObj )
22+ . sort ( ( a , b ) => b [ 1 ] - a [ 1 ] )
23+ . map ( ( [ num , cnt ] ) => Number ( num ) )
24+ . filter ( ( val , idx ) => idx < k )
25+
26+ return countArr
27+ }
You can’t perform that action at this time.
0 commit comments