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+ νμ΄
3+ - JS μ§ν© μλ£κ΅¬μ‘°μΈ Setμ νμ©ν©λλ€. Setμ μ€λ³΅κ°μ΄ λ€μ΄μ¬ κ²½μ° μ κ±°λμ΄ κ³ μ ν κ°λ€λ§ κ°λ νΉμ±μ΄ μμ΅λλ€.
4+ - numsλ₯Ό SetμΌλ‘ λ°κΎΈκ³ λ λ°μ΄ν°μ length(Setμ κ²½μ° size μ κ·Όμ μ¬μ©)λ₯Ό λΉκ΅ν©λλ€.
5+ - λ€λ₯Ό κ²½μ° : Setμμ μ€λ³΅κ°μ΄ μ κ±°λ κ²½μ°μ΄λ―λ‘ trueλ₯Ό λ°νν©λλ€.
6+ - κ°μ κ²½μ° : μ€λ³΅κ°μ΄ μλ κ²½μ°μ΄λ―λ‘ falseλ₯Ό λ°νν©λλ€.
7+
8+ Big O
9+ - Time Complexity: O(N) (Nμ numsμ κΈΈμ΄)
10+ new Set(nums)λ₯Ό λ§λλ κ³Όμ μμ λ°°μ΄μ λͺ¨λ μμλ₯Ό μννλ©° Setμ μ½μ
ν©λλ€. (μ½μ
νκ· μκ° O(1))
11+ numSet.size λ° nums.lengthλ κ°κ° O(1)μ΄λ―λ‘ μ΄ O(N)μ μκ°λ³΅μ‘λλ₯Ό κ°μ΅λλ€.
12+ - Space Complexity: O(N)
13+ Setμ μ΅λ nκ°μ μμκ° μ μ₯λλ―λ‘ O(N)μ 곡κ°λ³΅μ‘λλ₯Ό κ°μ΅λλ€.
14+ */
15+
16+ function containsDuplicate ( nums : number [ ] ) : boolean {
17+ const numSet = new Set ( nums )
18+ return numSet . size !== nums . length
19+ }
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+ }
Original file line number Diff line number Diff line change 1+ /*
2+ νμ΄
3+ ν΄μλ§΅μ μ΄μ©ν΄ νμ¬ κ°μ 보μ(target - num)κ° μ΄λ―Έ λ±μ₯νλμ§ νμΈνλ€.
4+
5+
6+ μκ°λ³΅μ‘λ
7+ O(N) - nums μν
8+
9+ 곡κ°λ³΅μ‘λ
10+ O(N) - numObj μμ±
11+ */
12+
13+ function twoSum ( nums : number [ ] , target : number ) : number [ ] {
14+ const numObj : { [ key : number ] : number } = { }
15+
16+ for ( let i = 0 ; i < nums . length ; i ++ ) {
17+ const num = nums [ i ]
18+ if ( target - num in numObj ) {
19+ return [ i , numObj [ target - num ] ]
20+ } else {
21+ numObj [ num ] = i
22+ }
23+ }
24+
25+ return [ ]
26+ }
You canβt perform that action at this time.
0 commit comments