1
+
1
2
/**
2
3
* ์ ์ ๋ฐฐ์ด nums
3
4
* ๊ฐ์ฅ ๋ง์ด ์ฐ์๋๋ ์์์ ๊ธธ์ด ๋ฆฌํด.
4
5
* O(n) ์๊ฐ์์ ๋์๊ฐ๋ ์๊ณ ๋ฆฌ์ฆ ์ฌ์ฉํ ๊ฒ.
5
6
*/
7
+ /*์ฐ์ ์ฒ์ ํผ ๋ฐฉ๋ฒ์*/
8
+
9
+ var longestConsecutive = function ( nums ) {
10
+ let maxCount = 0 ;
11
+ nums = [ ...nums ] . sort ( ( a , b ) => a - b ) ;
12
+ for ( let i = 0 ; i < nums . length ; i ++ ) {
13
+ let current = nums [ i ] ;
14
+ let count = 1 ;
15
+ for ( let j = i + 1 ; j < nums . length ; j ++ ) {
16
+ if ( current + 1 == nums [ j ] ) {
17
+ current = nums [ j ]
18
+ count += 1 ;
19
+ } else if ( current == nums [ j ] ) {
20
+ continue ;
21
+ }
22
+ }
23
+ maxCount = Math . max ( maxCount , count )
24
+ count = 1 ;
25
+ }
26
+ return maxCount
27
+ } ;
28
+
29
+
30
+ /*์๊ฐ๋ณต์ก๋:
31
+ 2์คfor๋ฌธ+sort
32
+ n^2 + nlogn => n^2.
33
+ ๊ณต๊ฐ๋ณต์ก๋:
34
+ nums๋ ์ด๊ธฐํํ๊ณ ,
35
+ ๊ธฐํ ๋ณ์๋ค๋ง ์ฌ์ฉ์ ํ๋ค(maxCount,current,count)=> O(1)
36
+
37
+ ํ์ง๋ง ์ด๋ฌธ์ ๋ O(n)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ ธ๊ฐ์ผํ๋ค.
38
+ ๊ทธ๋ฌ๋ ค๋ฉด sort๋ ํ์ง๋ง์์ผํ๊ณ , 2์คfor๋ฌธ์ ์ฐ์ง๋ ๋ง์์ผํ๋ค.
39
+ (์๊ฐํด๋ณด๋ ๋ด๊ฐ ์ฌ์ฉํ ๋ฐฉ๋ฒ์ ์ธ๋ฑ์ค+1ํด์ ํด๊ฒฐํด๋ ๋๊ธดํ๋ค. ๊ทธ๋๋ ์ ๋ ฌ๋๋ฌธ์ nlogn์ด ๋๋ค.)
40
+
41
+ ๋๋ฒ์งธ ๋ฐฉ๋ฒ์ผ๋ก๋,set์ ์ฌ์ฉํด์ ์ค๋ณต์ ์ ๊ฑฐํ๋ ๋ฐฉ๋ฒ์ด๋ค.
42
+ */
43
+
6
44
/**
7
45
* @param {number[] } nums
8
46
* @return {number }
9
47
*/
10
- var longestConsecutive = function ( nums ) {
11
- const numSet = new Set ( nums ) ;
12
- let maxCount = 0 ;
13
- for ( let i of numSet ) {
14
- //n ๋ฒ ์ํ
15
- // ++ ์ด์ ์ ์ฐ์์ฒดํฌ๊ฐ ๋์์ ์ ์์ผ๋ฏ๋ก, ์ด์ ์ซ์๊ฐ ์กด์ฌํ๋ค๋ฉด pass
16
- if ( numSet . has ( i - 1 ) ) continue ; //์ด๋ฏธ ์งํ ๋ ์ฐ์์ฒดํฌ์ ๊ฒฝ์ฐ ํ์ง ์๋๋ค.
17
- //์ฐ์์ด ๋๋์ง ํ์ธํด์ ์์ผ๋ฉด 1์ถ๊ฐ.
18
- let length = 0 ;
19
- while ( numSet . has ( i + length ) ) {
20
- //์ฐ์์ด ๋๊ธฐ๋ ์๊ฐ ๋ฉ์ถ๋ ๋ฐ๋ณต๋ฌธ. ์ฆ for๋ฌธ ์ ์ฒด ํตํ์ด ์ต๋ n๋ฒ ์คํ.
21
- length ++ ;
48
+ var longestConsecutive = function ( nums ) {
49
+ if ( nums . length == 0 ) return 0
50
+ let maxCount = 1 ;
51
+ nums . sort ( ( a , b ) => a - b ) ;
52
+ nums = [ ...new Set ( nums ) ] ;
53
+ let count = 1 ;
54
+ for ( let i = 0 ; i < nums . length - 1 ; i ++ ) {
55
+ if ( nums [ i ] + 1 === nums [ i + 1 ] ) {
56
+ count += 1 ;
57
+ } else if ( nums [ i ] === nums [ i + 1 ] ) {
58
+ // ์ค๋ณต์ผ ๊ฒฝ์ฐ ์๋ฌด๊ฒ๋ ์ ํ๊ณ ๋์ด๊ฐ
59
+ continue ;
60
+ } else {
61
+ maxCount = Math . max ( maxCount , count ) ;
62
+ count = 1 ;
63
+ }
22
64
}
23
- maxCount = Math . max ( length , maxCount ) ;
24
- }
25
- return maxCount ;
65
+ maxCount = Math . max ( maxCount , count ) ; // ๋ง์ง๋ง์๋ ๋น๊ต ํ์
66
+
67
+ return maxCount
26
68
} ;
69
+ /*sortํ ๋ ์๊ฐ๋ณต์ก๋๊ฐ nlog(n)์ธ๋ฐ ์ ํต๊ณผํ์ง.. ๋น
์ค ๊ณ์ฐ๋ฒ์ด ์ต์
์ ๊ฒฝ์ฐ๋ฅผ ๊ณ์ฐํ๊ฑฐ๋ผ, ์ด์ข๊ฒ ํต๊ณผํ ๊ฒ ๊ฐ๋ค.
70
+ ์ข ๋ ์ต์ ํ ํด๋ณด์
71
+ */
27
72
28
- //์๊ฐ๋ณต์ก๋ O(n) + O(n) = O(n) /๊ณต๊ฐ๋ณต์ก๋ O(n)
73
+ /**
74
+ * @param {number[] } nums
75
+ * @return {number }
76
+ */
77
+ var longestConsecutive = function ( nums ) {
78
+ const numsSet = new Set ( nums ) ;
79
+ let maxCount = 0 ;
80
+ for ( let num of numsSet ) {
81
+ //์ค๋ณต๋ ๊ณ์ฐ ํจ์ค
82
+ if ( numsSet . has ( num - 1 ) ) continue ;
83
+ let length = 1 ;
84
+ while ( numsSet . has ( num + length ) ) {
85
+ length ++
86
+ }
87
+ maxCount = Math . max ( maxCount , length )
88
+ }
89
+ return maxCount
90
+ } ;
29
91
30
- //์๊ฐํ ์ง์ . ์์ชฝ์ผ๋ก ์งํ๋๋ค๋ฉด, ์๊ฐ๋ณต์ก๋ ์ต์ ํ ๊ฐ๋ฅ
92
+ /*
93
+ set์ ์ด์ฉํด์ ์ค๋ณต์ ์ ๊ฑฐ
94
+ set์ has๋ฉ์๋๋ฅผ ํ์ฉํ์ฌ ์กฐํ ์ต์ ํ
95
+ while์ ์ผ์ง๋ง, for๋ฌธ์ ์ฒซ๋ฒ์งธ if๋ฌธ์ ํตํด ์ค์ ์ํ์ O(n)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง.
96
+ ์ด ์ธ์๋, set์ผ๋ก ๋ง๋ ๋ค์์ ์ญ์ ํด๊ฐ๋ฉด์(while) ์ํ๊ฐ ์๋, ์ผ์ชฝ ์ค๋ฅธ์ชฝ๊ฐ๋ค์ ์ฐ์์ ์ผ๋ก(while) ์ง์ฐ๊ณ , ์ฐ์์ด ๋๋๋ฉด pop์์ ๋์จ ๊ฐ์ left right๋ฅผ ์กฐํํด์ ์์ผ๋ฉด ๋ค์ ์ต๋๊ฐ๊ณผ ๋น๊ตํ๋ ๋ฐฉ์์ด ์๋ค.
97
+ ๊ทผ๋ฐ ์์ ์ฝ๋์์ has๋ก ์กฐํํ๋, remove๋ฅผ ํ๋ ค๋ฉด ์ด์ฐจํผ ๋ ์กฐํํด์ผํ๋,
98
+ ์ฑ๋ฅ์์ ์ฐจ์ด๋ ํฌ๊ฒ ์๋ ๊ฒ ๊ฐ๋ค.
99
+ */
0 commit comments