File tree 5 files changed +135
-0
lines changed
longest-consecutive-sequence
5 files changed +135
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {number[] } nums
3
+ * @return {boolean }
4
+ */
5
+
6
+ /**
7
+ * 1차 풀이
8
+ * - Map을 사용하여 각 숫자의 개수를 세는 방법
9
+ */
10
+ var containsDuplicate = function ( nums ) {
11
+ let dict = new Map ( ) ;
12
+
13
+ nums . forEach ( ( num ) => {
14
+ if ( dict . has ( num ) ) {
15
+ dict . set ( num , dict . get ( num ) + 1 ) ;
16
+ } else {
17
+ dict . set ( num , 1 ) ;
18
+ }
19
+ } )
20
+
21
+ for ( const num of nums ) {
22
+ if ( dict . get ( num ) >= 2 ) {
23
+ return true ;
24
+ }
25
+ }
26
+ return false ;
27
+ } ;
28
+
29
+ /**
30
+ * 2차풀이
31
+ * - Map을 사용하여 각 숫자의 개수를 세는 방법
32
+ * - forEach를 사용하지 않고 for of문을 사용하여 반복문을 돌리는 방법
33
+ */
34
+ var containsDuplicate = function ( nums ) {
35
+ let dict = new Map ( ) ;
36
+
37
+ for ( const num of nums ) {
38
+ if ( dict . has ( num ) ) {
39
+ dict . set ( num , dict . get ( num ) + 1 ) ;
40
+ } else {
41
+ dict . set ( num , 1 ) ;
42
+ }
43
+ if ( dict . get ( num ) >= 2 ) {
44
+ return true ;
45
+ }
46
+ }
47
+ return false ;
48
+ } ;
Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {number[] } nums
3
+ * @return {number }
4
+ */
5
+ var rob = function ( nums ) {
6
+ if ( nums . length === 0 ) return 0 ;
7
+ if ( nums . length === 1 ) return nums [ 0 ] ;
8
+
9
+ let dp = new Array ( nums . length ) ;
10
+ dp [ 0 ] = nums [ 0 ] ;
11
+ dp [ 1 ] = Math . max ( nums [ 0 ] , nums [ 1 ] ) ;
12
+
13
+ for ( let i = 2 ; i < nums . length ; i ++ ) {
14
+ dp [ i ] = Math . max ( dp [ i - 1 ] , nums [ i ] + dp [ i - 2 ] ) ;
15
+ }
16
+
17
+ return dp [ nums . length - 1 ] ;
18
+ } ;
Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {number[] } nums
3
+ * @return {number }
4
+ */
5
+ var longestConsecutive = function ( nums ) {
6
+ if ( nums . length === 0 ) return 0 ;
7
+
8
+ const numSet = new Set ( nums ) ;
9
+ let maxLength = 0 ;
10
+
11
+ for ( let num of numSet ) {
12
+ // 연속 수열의 시작점인지 확인
13
+ if ( ! numSet . has ( num - 1 ) ) {
14
+ let currentNum = num ;
15
+ let currentLength = 1 ;
16
+
17
+ // 연속된 숫자 있는 동안 증가
18
+ while ( numSet . has ( currentNum + 1 ) ) {
19
+ currentNum += 1 ;
20
+ currentLength += 1 ;
21
+ }
22
+
23
+ maxLength = Math . max ( maxLength , currentLength ) ;
24
+ }
25
+ }
26
+
27
+ return maxLength ;
28
+ } ;
Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {number[] } nums
3
+ * @param {number } k
4
+ * @return {number[] }
5
+ */
6
+ var topKFrequent = function ( nums , k ) {
7
+ let dict = new Map ( ) ;
8
+ let temp = Array . from ( new Set ( [ ...nums ] ) ) ;
9
+ for ( const num of nums ) {
10
+ if ( dict . has ( num ) ) {
11
+ dict . set ( num , dict . get ( num ) + 1 ) ;
12
+ } else {
13
+ dict . set ( num , 1 ) ;
14
+ }
15
+ }
16
+
17
+ temp = temp . sort ( ( a , b ) => {
18
+ let aCount = dict . get ( a ) ;
19
+ let bCount = dict . get ( b ) ;
20
+
21
+ return bCount - aCount ;
22
+ } )
23
+
24
+ let slice = temp . slice ( 0 , k ) ;
25
+ return slice ;
26
+ } ;
Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {number[] } nums
3
+ * @param {number } target
4
+ * @return {number[] }
5
+ */
6
+ var twoSum = function ( nums , target ) {
7
+ let dict = new Map ( ) ;
8
+
9
+ for ( const [ index , num ] of nums . entries ( ) ) {
10
+ if ( dict . has ( target - num ) && dict . get ( target - num ) != index ) {
11
+ return [ dict . get ( target - num ) , index ] ;
12
+ }
13
+ dict . set ( num , index ) ;
14
+ }
15
+ } ;
You can’t perform that action at this time.
0 commit comments