File tree 5 files changed +175
-0
lines changed
product-of-array-except-self
validate-binary-search-tree
5 files changed +175
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ *
3
+ * 시간 복잡도: O(n log n) + O(n^2) => O(n^2)
4
+ * 공간 복잡도: O(1)
5
+ * - 자바스크립트 배열은 원래의 배열 자체를 바꿈
6
+ */
7
+ const threeSum = ( numbers ) => {
8
+ let result = [ ] ;
9
+ numbers . sort ( ( a , b ) => a - b ) ;
10
+
11
+ for ( let i = 0 ; i < numbers . length ; i += 1 ) {
12
+ if ( i > 0 && numbers [ i ] === numbers [ i - 1 ] ) continue ;
13
+
14
+ let l = i + 1 ;
15
+ let r = numbers . length - 1 ;
16
+
17
+ while ( l < r ) {
18
+ const threeSum = numbers [ i ] + numbers [ l ] + numbers [ r ] ;
19
+
20
+ if ( threeSum > 0 ) {
21
+ r -= 1 ;
22
+ } else if ( threeSum < 0 ) {
23
+ l += 1 ;
24
+ } else {
25
+ result . push ( [ numbers [ i ] , numbers [ l ] , numbers [ r ] ] ) ;
26
+ while ( l < r && numbers [ l ] === numbers [ l + 1 ] ) l += 1 ;
27
+ while ( l < r && numbers [ r ] === numbers [ r - 1 ] ) r -= 1 ;
28
+ l += 1 ;
29
+ r -= 1 ;
30
+ }
31
+ }
32
+ }
33
+
34
+ return result ;
35
+ } ;
Original file line number Diff line number Diff line change
1
+ /**
2
+ * 시간복잡도: O(n)
3
+ * - for문 O(n)
4
+ * 공간복잡도: O(n)
5
+ * - arr O(n)
6
+ */
7
+ // const climbStairs = (n) => {
8
+ // const arr = [1, 2];
9
+
10
+ // for (let i = 2; i < n; i += 1) {
11
+ // arr[i] = arr[i - 1] + arr[i - 2];
12
+ // }
13
+
14
+ // return arr[n - 1];
15
+ // };
16
+
17
+ /**
18
+ * 시간복잡도: O(n)
19
+ * - for문 O(n)
20
+ * 공간복잡도: O(1)
21
+ */
22
+ const climbStairs = ( n ) => {
23
+ let one = 1 ;
24
+ let two = 1 ;
25
+
26
+ for ( let i = 0 ; i <= n - 2 ; i += 1 ) {
27
+ let temp = one + two ;
28
+ one = two ;
29
+ two = temp ;
30
+ }
31
+
32
+ return two ;
33
+ } ;
Original file line number Diff line number Diff line change
1
+ /**
2
+ * 시간복잡도: O(n)
3
+ * - 첫번째 for문 O(n)
4
+ * - 두번째 for문 O(n)
5
+ *
6
+ * 공간 복잡도: O(1)
7
+ * - 추가 배열 생성 X
8
+ */
9
+ // const productExceptSelf = (nums) => {
10
+ // let multiplyResult = 1;
11
+ // let countZero = 0;
12
+
13
+ // for (let i = 0; i < nums.length; i += 1) {
14
+ // if (nums[i] === 0) {
15
+ // countZero += 1;
16
+
17
+ // if (countZero >= 2) {
18
+ // multiplyResult = 0;
19
+ // break;
20
+ // }
21
+
22
+ // continue;
23
+ // }
24
+ // multiplyResult *= nums[i];
25
+ // }
26
+
27
+ // for (let i = 0; i < nums.length; i += 1) {
28
+ // if (countZero === 1) {
29
+ // if (nums[i] === 0) {
30
+ // nums[i] = multiplyResult;
31
+ // } else {
32
+ // nums[i] = 0;
33
+ // }
34
+ // } else if (countZero >= 2) {
35
+ // nums[i] = 0;
36
+ // } else {
37
+ // nums[i] = multiplyResult / nums[i];
38
+ // }
39
+ // }
40
+
41
+ // return nums;
42
+ // };
43
+
44
+ // 누적 합 이용
45
+ const productExceptSelf = ( nums ) => {
46
+ const result = Array ( nums . length ) . fill ( 1 ) ;
47
+
48
+ let prefix = 1 ;
49
+
50
+ for ( let i = 0 ; i < nums . length ; i += 1 ) {
51
+ result [ i ] = prefix ;
52
+ prefix *= nums [ i ] ;
53
+ }
54
+
55
+ let postfix = 1 ;
56
+
57
+ for ( let i = nums . length - 1 ; i >= 0 ; i -= 1 ) {
58
+ result [ i ] *= postfix ;
59
+ postfix *= nums [ i ] ;
60
+ }
61
+
62
+ return result ;
63
+ } ;
Original file line number Diff line number Diff line change
1
+ /**
2
+ * 시간복잡도: O(n)
3
+ * - 첫번째 for문 O(n)
4
+ * - 두번째 for문 최대 O(n)
5
+ * 공간복잡도: O(n)
6
+ * - count O(n)
7
+ */
8
+
9
+ const isAnagram = ( s , t ) => {
10
+ if ( s . length !== t . length ) return false ;
11
+
12
+ const count = { } ;
13
+
14
+ for ( let i = 0 ; i < s . length ; i += 1 ) {
15
+ count [ s [ i ] ] = ( count [ s [ i ] ] || 0 ) + 1 ;
16
+ count [ t [ i ] ] = ( count [ t [ i ] ] || 0 ) - 1 ;
17
+ }
18
+
19
+ for ( const i of Object . values ( count ) ) {
20
+ if ( i !== 0 ) return false ;
21
+ }
22
+
23
+ return true ;
24
+ } ;
Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {TreeNode } root
3
+ * @return {boolean }
4
+ */
5
+ var isValidBST = function ( root ) {
6
+ let prev = - Infinity ;
7
+
8
+ const inorder = ( node ) => {
9
+ if ( ! node ) return true ;
10
+
11
+ if ( ! inorder ( node . left ) ) return false ;
12
+
13
+ if ( node . val <= prev ) return false ;
14
+ prev = node . val ;
15
+
16
+ return inorder ( node . right ) ;
17
+ } ;
18
+
19
+ return inorder ( root ) ;
20
+ } ;
You can’t perform that action at this time.
0 commit comments