File tree Expand file tree Collapse file tree 5 files changed +175
-0
lines changed
product-of-array-except-self
validate-binary-search-tree Expand file tree Collapse file 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