Skip to content

Commit d48dba6

Browse files
authored
Merge pull request #1237 from lhc0506/main
[lhc0506] WEEK 02 solutions
2 parents 48f60a2 + 271d463 commit d48dba6

File tree

5 files changed

+171
-0
lines changed

5 files changed

+171
-0
lines changed

3sum/lhc0506.js

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number[][]}
4+
*/
5+
var threeSum = function(nums) {
6+
const result = [];
7+
const numsMap = {};
8+
9+
nums.forEach((num, index) => {
10+
numsMap[num] = (numsMap[num] || 0) + 1;
11+
12+
});
13+
14+
for (let i = 0; i < nums.length - 1; i++) {
15+
for (let j = i + 1; j < nums.length; j++) {
16+
const a = nums[i];
17+
const b = nums[j];
18+
const targetNum = -(a + b);
19+
20+
if (!numsMap[targetNum]) {
21+
continue;
22+
}
23+
24+
if ((targetNum === a || targetNum === b) && numsMap[targetNum] === 1) {
25+
continue;
26+
}
27+
28+
if (targetNum === a && targetNum === b && numsMap[targetNum] <= 2) {
29+
continue;
30+
}
31+
32+
const triplet = [a, b, targetNum].sort((x, y) => x - y);
33+
const key = triplet.join(',');
34+
35+
if (seen.has(key)) {
36+
continue;
37+
}
38+
39+
seen.add(key);
40+
41+
result.push(triplet);
42+
}
43+
}
44+
45+
return result;
46+
};
47+
48+
49+
//시간 복잡도 O(n²) , 공간 복잡도 O(n²) 라고 생각했는데 Time Limit Exceeded 에러 발생
50+
// 추후 다시 풀어볼 예정

climbing-stairs/lhc0506.js

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/**
2+
* @param {number} n
3+
* @return {number}
4+
*/
5+
var climbStairs = function(n) {
6+
let preStairs = 0;
7+
let curStairs = 1;
8+
9+
10+
for (let i = 0; i < n; i++) {
11+
let sum = preStairs + curStairs;
12+
preStairs = curStairs;
13+
curStairs = sum;
14+
}
15+
16+
return curStairs;
17+
};
+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
2+
// 풀이 1
3+
// /**
4+
// * @param {number[]} nums
5+
// * @return {number[]}
6+
// */
7+
// var productExceptSelf = function(nums) {
8+
// let hasZero = false;
9+
// const allProductNums = nums.reduce((acc, cur) => {
10+
// if (cur === 0) {
11+
// if (!hasZero) {
12+
// hasZero = true;
13+
// return acc;
14+
// }
15+
16+
// return 0;
17+
// }
18+
// return acc * cur;
19+
// }, 1);
20+
21+
// return nums.map(num => {
22+
// if (num === 0) {
23+
// return allProductNums;
24+
// }
25+
26+
// return hasZero ? 0 : allProductNums / num;
27+
// });
28+
// };
29+
30+
//풀이 2
31+
/**
32+
* @param {number[]} nums
33+
* @return {number[]}
34+
*/
35+
var productExceptSelf = function(nums) {
36+
const result = Array(nums.length).fill(1);
37+
38+
let beforeProductNum = 1;
39+
for (let i = 0; i < nums.length; i++) {
40+
result[i] *= beforeProductNum;
41+
beforeProductNum *= nums[i];
42+
}
43+
44+
let afterProductNum = 1;
45+
for (let i = nums.length - 1; i >= 0; i--) {
46+
result[i] *= afterProductNum;
47+
afterProductNum *= nums[i];
48+
}
49+
50+
return result;
51+
};
52+
53+
54+
//두 풀이 모두 시간 복잡도 O(n), 공간 복잡도는 O(n)

valid-anagram/lhc0506.js

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/**
2+
* @param {string} s
3+
* @param {string} t
4+
* @return {boolean}
5+
*/
6+
var isAnagram = function(s, t) {
7+
if (s.length !== t.length) {
8+
return false;
9+
}
10+
11+
const charCountMap = {};
12+
13+
for (let char of s) {
14+
charCountMap[char] = (charCountMap[char] || 0) + 1;
15+
}
16+
17+
for (let char of t) {
18+
if (!charCountMap[char]) {
19+
return false;
20+
}
21+
22+
charCountMap[char] -= 1;
23+
}
24+
25+
return true;
26+
};
+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* function TreeNode(val, left, right) {
4+
* this.val = (val===undefined ? 0 : val)
5+
* this.left = (left===undefined ? null : left)
6+
* this.right = (right===undefined ? null : right)
7+
* }
8+
*/
9+
/**
10+
* @param {TreeNode} root
11+
* @return {boolean}
12+
*/
13+
var isValidBST = function(root) {
14+
const dfs = (node, min, max) => {
15+
if (!node) return true;
16+
if (!((node.val > min) && (node.val < max))) return false;
17+
18+
return dfs(node.left, min, node.val) && dfs(node.right, node.val, max);
19+
}
20+
21+
return dfs(root, Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER);
22+
};
23+
24+
// 시간 복잡도 O(n) , 공간 복잡도 최악의 경우 O(n)

0 commit comments

Comments
 (0)