Skip to content

Commit c86935f

Browse files
authored
Merge pull request #1203 from seungseung88/main
[seungseung88] WEEK 02 solutions
2 parents d564b94 + 56d90d1 commit c86935f

File tree

5 files changed

+175
-0
lines changed

5 files changed

+175
-0
lines changed

3sum/seungseung88.js

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
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+
};

climbing-stairs/seungseung88.js

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
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 numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
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+
};

valid-anagram/seungseung88.js

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
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 numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
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+
};

0 commit comments

Comments
 (0)