File tree Expand file tree Collapse file tree
longest-consecutive-sequence Expand file tree Collapse file tree 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+ return new Set ( nums ) . size != nums . length ;
7+ } ;
8+
9+ // 40ms 80.33MB
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+ // 집의 개수
7+ const n = nums . length ;
8+
9+ // 집이 하나뿐이면 그 집을 터는 것이 최대값
10+ if ( n === 1 ) {
11+ return nums [ 0 ] ;
12+ }
13+
14+ // dp[i] = 0번 집부터 i번 집까지 고려했을 때 훔칠 수 있는 최대 금액
15+ const dp = Array ( n ) . fill ( 0 ) ;
16+
17+ // 첫 번째 집까지의 최대 금액
18+ dp [ 0 ] = nums [ 0 ] ;
19+
20+ // 두 번째 집까지의 최대 금액
21+ // 두 집은 동시에 털 수 없으므로 둘 중 큰 값을 선택
22+ dp [ 1 ] = Math . max ( nums [ 0 ] , nums [ 1 ] ) ;
23+
24+ // 세 번째 집부터 마지막 집까지 반복
25+ for ( let i = 2 ; i < n ; i ++ ) {
26+
27+ // 두 가지 선택지 중 더 큰 값을 선택
28+ // 1️⃣ 현재 집을 털지 않는다 → 이전 집까지의 최대 금액(dp[i-1])
29+ // 2️⃣ 현재 집을 턴다 → 전전 집까지의 최대 금액(dp[i-2]) + 현재 집 돈(nums[i])
30+ dp [ i ] = Math . max ( dp [ i - 1 ] , nums [ i ] + dp [ i - 2 ] ) ;
31+ }
32+
33+ // 마지막 집까지 고려했을 때의 최대 금액 반환
34+ return dp [ n - 1 ] ;
35+ } ;
Original file line number Diff line number Diff line change 1+ /**
2+ * 주어진 숫자 배열에서 가장 긴 연속된 수열의 길이를 찾는다.
3+ * 시간복잡도: O(n)
4+ * 이유: 각 숫자는 최대 한 번만 시작점으로 검사되고,
5+ * 연속 수열 탐색도 중복 없이 진행된다.
6+ *
7+ * @param {number[] } nums
8+ * @return {number }
9+ */
10+ var longestConsecutive = function ( nums ) {
11+
12+ // 배열을 Set으로 변환
13+ const numSet = new Set ( nums ) ;
14+
15+ // 가장 긴 연속 길이를 저장
16+ let longest = 0 ;
17+ // Set을 순회
18+ for ( let n of numSet ) {
19+ // 현재 숫자가 연속 수열의 "시작점"인지 확인
20+ // n-1 이 존재하면 이미 앞에 전 수열 존재함
21+ if ( ! numSet . has ( n - 1 ) ) {
22+
23+ // 시작하는 수열 길이
24+ let length = 1 ;
25+
26+ // 계속 존재하는지 확인
27+ while ( numSet . has ( n + length ) ) {
28+ length ++ ;
29+ }
30+ // 지금까지 찾은 최대 길이 갱신
31+ longest = Math . max ( longest , length ) ;
32+ }
33+ }
34+ return longest ;
35+ } ;
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+ // 13ms 60mb
8+ var topKFrequent = function ( nums , k ) {
9+ let freq = new Map ( )
10+ for ( let i of nums ) {
11+ freq . set ( i , ( freq . get ( i ) || 0 ) + 1 )
12+ }
13+ const sorted = [ ...freq . entries ( ) ] . sort ( ( a , b ) => b [ 1 ] - a [ 1 ] ) ;
14+ let result = [ ]
15+ for ( let j = 0 ; j < k ; j ++ ) {
16+ result . push ( sorted [ j ] [ 0 ] )
17+ }
18+ return result
19+ } ;
Original file line number Diff line number Diff line change 1+ /**
2+ * @param {number[] } nums
3+ * @param {number } target
4+ * @return {number[] }
5+ */
6+
7+ // 34ms 54mb
8+ var twoSum = function ( nums , target ) {
9+ for ( let i = 0 ; i < nums . length ; i ++ ) {
10+ for ( let j = i + 1 ; j < nums . length ; j ++ ) {
11+ if ( nums [ j ] === target - nums [ i ] ) {
12+ return [ i , j ] ;
13+ }
14+ }
15+ }
16+ return [ ]
17+ } ;
You can’t perform that action at this time.
0 commit comments