1+
12/**
23 * ์ ์ ๋ฐฐ์ด nums
34 * ๊ฐ์ฅ ๋ง์ด ์ฐ์๋๋ ์์์ ๊ธธ์ด ๋ฆฌํด.
45 * O(n) ์๊ฐ์์ ๋์๊ฐ๋ ์๊ณ ๋ฆฌ์ฆ ์ฌ์ฉํ ๊ฒ.
56 */
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+
644/**
745 * @param {number[] } nums
846 * @return {number }
947 */
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+ }
2264 }
23- maxCount = Math . max ( length , maxCount ) ;
24- }
25- return maxCount ;
65+ maxCount = Math . max ( maxCount , count ) ; // ๋ง์ง๋ง์๋ ๋น๊ต ํ์
66+
67+ return maxCount
2668} ;
69+ /*sortํ ๋ ์๊ฐ๋ณต์ก๋๊ฐ nlog(n)์ธ๋ฐ ์ ํต๊ณผํ์ง.. ๋น
์ค ๊ณ์ฐ๋ฒ์ด ์ต์
์ ๊ฒฝ์ฐ๋ฅผ ๊ณ์ฐํ๊ฑฐ๋ผ, ์ด์ข๊ฒ ํต๊ณผํ ๊ฒ ๊ฐ๋ค.
70+ ์ข ๋ ์ต์ ํ ํด๋ณด์
71+ */
2772
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+ } ;
2991
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