File tree Expand file tree Collapse file tree 5 files changed +129
-0
lines changed
longest-consecutive-sequence Expand file tree Collapse file tree 5 files changed +129
-0
lines changed Original file line number Diff line number Diff line change 1+ // ์๊ฐ๋ณต์ก๋: O(n)
2+
3+ /**
4+ * @param {number[] } nums
5+ * @return {boolean }
6+ */
7+ var containsDuplicate = function ( nums ) {
8+ const seen = new Set ( ) ;
9+ for ( let num of nums ) {
10+ if ( seen . has ( num ) ) {
11+ return true ; // ์ค๋ณต ๋ฐ๊ฒฌ
12+ }
13+ seen . add ( num ) ;
14+ }
15+ return false ; // ๋ชจ๋ ์์๊ฐ ๊ณ ์
16+ } ;
17+
Original file line number Diff line number Diff line change 1+ // ์๊ฐ๋ณต์ก๋: O(n)
2+
3+ /**
4+ * @param {number[] } nums
5+ * @return {number }
6+ */
7+ var rob = function ( nums ) {
8+ const n = nums . length ;
9+ if ( n === 0 ) return 0 ;
10+ if ( n === 1 ) return nums [ 0 ] ;
11+
12+ // DP ๋ฐฐ์ด ์ด๊ธฐํ
13+ let prev2 = 0 ; // dp[i-2]
14+ let prev1 = 0 ; // dp[i-1]
15+
16+ // ์ต๋ ์์ต ๊ณ์ฐ
17+ for ( let num of nums ) {
18+ const current = Math . max ( prev1 , prev2 + num ) ;
19+ prev2 = prev1 ;
20+ prev1 = current ;
21+ }
22+
23+ return prev1 ;
24+ } ;
25+
Original file line number Diff line number Diff line change 1+ // ์๊ฐ๋ณต์ก๋: O(n)
2+
3+ /**
4+ * @param {number[] } nums
5+ * @return {number }
6+ */
7+ var longestConsecutive = function ( nums ) {
8+ // Set์ ์ฌ์ฉํด ์ค๋ณต ์ ๊ฑฐ
9+ const numSet = new Set ( nums ) ;
10+ let longestStreak = 0 ;
11+
12+ // ๊ฐ ์ซ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฐ์ ์ํ์ค๋ฅผ ํ์
13+ for ( let num of numSet ) {
14+ // num์ด ์ํ์ค์ ์์์ ์ธ ๊ฒฝ์ฐ๋ง ํ์
15+ if ( ! numSet . has ( num - 1 ) ) {
16+ let currentNum = num ;
17+ let currentStreak = 1 ;
18+
19+ // ํ์ฌ ์ํ์ค๋ฅผ ๋ฐ๋ผ๊ฐ๋ฉฐ ๊ธธ์ด ๊ณ์ฐ
20+ while ( numSet . has ( currentNum + 1 ) ) {
21+ currentNum ++ ;
22+ currentStreak ++ ;
23+ }
24+
25+ // ์ต๋ ๊ธธ์ด๋ฅผ ์
๋ฐ์ดํธ
26+ longestStreak = Math . max ( longestStreak , currentStreak ) ;
27+ }
28+ }
29+
30+ return longestStreak ;
31+ } ;
32+
Original file line number Diff line number Diff line change 1+ // ์๊ฐ๋ณต์ก๋: O(n)
2+
3+ /**
4+ * @param {number[] } nums
5+ * @param {number } k
6+ * @return {number[] }
7+ */
8+ var topKFrequent = function ( nums , k ) {
9+ // ๋น๋ ๊ณ์ฐ
10+ const frequencyMap = new Map ( ) ;
11+ for ( let num of nums ) {
12+ frequencyMap . set ( num , ( frequencyMap . get ( num ) || 0 ) + 1 ) ;
13+ }
14+
15+ // ๋ฒํท ์ ๋ ฌ
16+ const bucket = Array ( nums . length + 1 ) . fill ( null ) . map ( ( ) => [ ] ) ;
17+ for ( let [ num , freq ] of frequencyMap ) {
18+ bucket [ freq ] . push ( num ) ;
19+ }
20+
21+ // ๋น๋ ๋์ ์์๋ค ์ถ์ถ
22+ const result = [ ] ;
23+ for ( let i = bucket . length - 1 ; i >= 0 && result . length < k ; i -- ) {
24+ if ( bucket [ i ] . length > 0 ) {
25+ result . push ( ...bucket [ i ] ) ;
26+ }
27+ }
28+
29+ return result . slice ( 0 , k ) ; // ์์ k๊ฐ์ ์์ ๋ฐํ
30+ } ;
31+
Original file line number Diff line number Diff line change 1+ // ์๊ฐ๋ณต์ก๋: O(n)
2+
3+ /**
4+ * @param {string } s
5+ * @return {boolean }
6+ */
7+ var isPalindrome = function ( s ) {
8+ // ์ ์ฒ๋ฆฌ - ์ํ๋ฒณ๊ณผ ์ซ์๋ง ๋จ๊ธฐ๊ณ ์๋ฌธ์๋ก ๋ณํ
9+ const cleanString = s . toLowerCase ( ) . replace ( / [ ^ a - z 0 - 9 ] / g, "" ) ;
10+
11+ // ์ ๋์์ ํฌ์ธํฐ๋ฅผ ์ด๋ํ๋ฉฐ ํ์ธ
12+ let left = 0 , right = cleanString . length - 1 ;
13+
14+ while ( left < right ) {
15+ if ( cleanString [ left ] !== cleanString [ right ] ) {
16+ return false ; // ๋์นญ์ด ๊นจ์ง๋ฉด false
17+ }
18+ left ++ ;
19+ right -- ;
20+ }
21+
22+ return true ; // ๋์นญ์ด ์ ์ง๋๋ฉด true
23+ } ;
24+
You canโt perform that action at this time.
0 commit comments