File tree Expand file tree Collapse file tree 4 files changed +157
-0
lines changed
longest-consecutive-sequence Expand file tree Collapse file tree 4 files changed +157
-0
lines changed Original file line number Diff line number Diff line change 1+ /**
2+ * @param {number[] } nums
3+ * @return {boolean }
4+ */
5+ var containsDuplicate = function ( nums ) {
6+ const sortedNums = nums . sort ( ( a , b ) => a - b ) ;
7+ const length = sortedNums . length - 1 ;
8+
9+ for ( let i = 0 ; i < length ; i ++ ) {
10+ const left = nums [ i ] ;
11+ const right = nums [ i + 1 ] ;
12+
13+ if ( left === right ) {
14+ return true ;
15+ }
16+ }
17+
18+ return false ;
19+ } ;
Original file line number Diff line number Diff line change 1+ /**
2+ * solve 1
3+ *
4+ * 시간 복잡도: O(n log n)
5+ * 공간 복잡도: O(n)
6+ *
7+ * @param {number[] } nums
8+ * @return {number }
9+ */
10+ var longestConsecutive = function ( nums ) {
11+ // 예외
12+ if ( nums . length === 0 ) {
13+ return 0 ;
14+ }
15+
16+ const sortedArr = [ ...new Set ( nums ) ] . sort ( ( a , b ) => a - b ) ;
17+
18+ let result = 1 ;
19+ let consecutive = 1 ;
20+
21+ for ( let i = 0 ; i < sortedArr . length - 1 ; i ++ ) {
22+ const curr = sortedArr [ i ] ;
23+ const next = sortedArr [ i + 1 ] ;
24+
25+ if ( next === curr + 1 ) {
26+ consecutive += 1 ;
27+ } else {
28+ consecutive = 1 ;
29+ }
30+
31+ result = Math . max ( result , consecutive ) ;
32+ }
33+
34+ return result ;
35+ } ;
36+
37+ /**
38+ * solve 2
39+ *
40+ * 시간 복잡도: O(n)
41+ * 공간 복잡도: O(n)
42+ *
43+ * @param {number[] } nums
44+ * @return {number }
45+ */
46+ var longestConsecutive = function ( nums ) {
47+ let longest = 0 ;
48+ const numSet = new Set ( nums ) ;
49+
50+ for ( const num of numSet ) {
51+ if ( numSet . has ( num - 1 ) ) continue ;
52+ let length = 1 ;
53+
54+ while ( numSet . has ( num + length ) ) length ++ ;
55+
56+ longest = Math . max ( length , longest ) ;
57+ }
58+
59+ return longest ;
60+ }
Original file line number Diff line number Diff line change 1+ /**
2+ * @param {number[] } nums
3+ * @param {number } k
4+ * @return {number[] }
5+ */
6+
7+ /*
8+ * 시간 복잡도: O(n log n)
9+ * 공간 복잡도: O(n)
10+ *
11+ * 1. map 구조를 사용해서 몇번 나왔는지 카운트한다.
12+ * 2. map 구조에서 가장 큰 수를 구한다.
13+ */
14+ var topKFrequent = function ( nums , k ) {
15+ const map = new Map ( ) ;
16+
17+ for ( let i = 0 ; i < nums . length ; i ++ ) {
18+ if ( ! map . has ( nums [ i ] ) ) {
19+ map . set ( nums [ i ] , 1 ) ;
20+ } else {
21+ map . set ( nums [ i ] , map . get ( nums [ i ] ) + 1 ) ;
22+ }
23+ }
24+
25+ const result = [ ...map . entries ( ) ] . sort ( ( a , b ) => b [ 1 ] - a [ 1 ] ) ;
26+
27+ return result . slice ( 0 , k ) . map ( ( val ) => val [ 0 ] ) ;
28+ } ;
Original file line number Diff line number Diff line change 1+ /**
2+ * solve 1
3+ *
4+ * 시간 복잡도: O(n^2)
5+ * 공간 복잡도: O(1)
6+ *
7+ * @param {number[] } nums
8+ * @param {number } target
9+ * @return {number[] }
10+ */
11+ var twoSum = function ( nums , target ) {
12+ const length = nums . length - 1 ;
13+
14+ for ( let i = 0 ; i < length ; i ++ ) {
15+ for ( let j = length ; j > 0 ; j -- ) {
16+ const sum = nums [ i ] + nums [ j ] ;
17+
18+ if ( i !== j ) {
19+ if ( sum === target ) {
20+ return [ i , j ] ;
21+ }
22+ }
23+ }
24+ }
25+ } ;
26+
27+
28+ /**
29+ * solve 2
30+ *
31+ * 시간 복잡도: O(n)
32+ * 공간 복잡도: O(n)
33+ *
34+ * @param {number[] } nums
35+ * @param {number } target
36+ * @return {number[] }
37+ */
38+ var twoSum = function ( nums , target ) {
39+ const map = new Map ( ) ;
40+
41+ for ( let i = 0 ; i < nums . length ; i ++ ) {
42+ const temp = target - nums [ i ] ;
43+
44+ if ( map . has ( temp ) ) {
45+ return [ map . get ( temp ) , i ] ;
46+ }
47+
48+ map . set ( nums [ i ] , i ) ;
49+ }
50+ } ;
You can’t perform that action at this time.
0 commit comments