Skip to content

Commit 2dc5135

Browse files
authored
Merge pull request #997 from jdy8739/main
[jdy8739] Week 10
2 parents b87290d + 5ce036a commit 2dc5135

File tree

5 files changed

+173
-1
lines changed

5 files changed

+173
-1
lines changed

โ€Žinvert-binary-tree/jdy8739.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
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 {TreeNode}
12+
*/
13+
var invertTree = function (root) {
14+
const dfs = (node) => {
15+
if (!node) {
16+
return null;
17+
}
18+
19+
const temp = node.left;
20+
node.left = node.right;
21+
node.right = temp;
22+
23+
dfs(node.left);
24+
dfs(node.right);
25+
}
26+
27+
dfs(root);
28+
29+
return root;
30+
};
31+
32+
// ์‹œ๊ฐ„๋ณต์žก๋„ O(n) ๊นŠ์ด์šฐ์„ ํƒ์ƒ‰์œผ๋กœ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์ˆœํšŒํ•˜๋ฏ€๋กœ

โ€Žjump-game/jdy8739.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {boolean}
4+
*/
5+
var canJump = function (nums) {
6+
const dp = new Array(nums.length).fill(false);
7+
8+
dp[0] = true;
9+
10+
for (let i = 0; i < nums.length; i++) {
11+
if (!dp[i]) {
12+
continue;
13+
}
14+
15+
for (let j = 1; j < nums[i] + 1; j++) {
16+
if (i + j >= nums.length) {
17+
break;
18+
}
19+
20+
dp[i + j] = true;
21+
}
22+
}
23+
24+
return dp[dp.length - 1];
25+
};
26+
27+
// ์‹œ๊ฐ„๋ณต์žก๋„ O(n2) -> nums์˜ ๊ธธ์ด๋Œ€๋กœ ์ˆœํšŒํ•˜๋ฉด์„œ 1๋ถ€ํ„ฐ nums[j]์˜ ๊ฐ’๊นŒ์ง€ ์ˆœํšŒํ•˜๋Š” 2์ค‘ ๋ฃจํ”„๋ฅผ ๋Œ๊ธฐ ๋•Œ๋ฌธ
28+
// ๊ณต๊ฐ„๋ณต์žก๋„ 0(n) -> nums์˜ ๊ธธ์ด์— ๋”ฐ๋ผ dp ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ ๊ฒฐ์ •๋˜๋ฏ€๋กœ

โ€Žmaximum-product-subarray/jdy8739.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,6 @@ var maxProduct = function (nums) {
2020
return answer;
2121
};
2222

23-
// ์‹œ๊ฐ„๋ณต์žก๋„ O(n) * O(8) -> nums์˜ ๊ธธ์ด ๋งŒํผ์„ for ๋ฌธ์œผ๋กœ ์ˆœํ™˜ํ•˜๋ฉด์„œ Mathํด๋ž˜์Šค์˜ max, min๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœ(์ธ์ž๊ฐ€ 3๊ฐœ, 3๊ฐœ, 2๊ฐœ ์ด๋ฏ€๋กœ ์ด 8ํšŒ ์ˆœํšŒ)
23+
// ์‹œ๊ฐ„๋ณต์žก๋„ O(n) -> nums์˜ ๊ธธ์ด ๋งŒํผ์„ for ๋ฌธ ์ˆœํ™˜ํ•˜๊ธฐ๋•Œ๋ฌธ์—
2424
// ๊ณต๊ฐ„๋ณต์žก๋„ O(1) -> ํŒŒ๋ผ๋ฏธํ„ฐ nums์— ๋Œ€ํ•ด ์˜๋ฏธ์žˆ๋Š” ๊ณต๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๋Š” ๋ณ€์ˆ˜ํ• ๋‹น์ด ์—†์Œ
25+

โ€Žmerge-k-sorted-lists/jdy8739.js

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* function ListNode(val, next) {
4+
* this.val = (val===undefined ? 0 : val)
5+
* this.next = (next===undefined ? null : next)
6+
* }
7+
*/
8+
/**
9+
* @param {ListNode[]} lists
10+
* @return {ListNode}
11+
*/
12+
var mergeKLists = function (lists) {
13+
const arr = [];
14+
15+
for (let i = 0; i < lists.length; i++) {
16+
let list = lists[i];
17+
18+
while (list) {
19+
arr.push(list.val);
20+
list = list.next;
21+
}
22+
}
23+
24+
if (!arr.length) {
25+
return null;
26+
}
27+
28+
arr.sort((a, b) => a - b);
29+
30+
const first = new ListNode(arr[0]);
31+
32+
let node = first;
33+
34+
for (let j = 1; j < arr.length; j++) {
35+
const next = new ListNode(arr[j]);
36+
node.next = next;
37+
node = next;
38+
}
39+
40+
return first;
41+
};
42+
43+
// ์‹œ๊ฐ„๋ณต์žก๋„ -> for๋ฌธ ์ดํ›„ sort ์ดํ›„ for๋ฌธ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ ์ด๋Š” O(n) + O(nlogn) + O(n)์ด๋ฏ€๋กœ O(nlogn)๊ฐ€ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๋œ๋‹ค
44+
// ๊ณต๊ฐ„๋ณต์žก๋„ -> lists์˜ ๋…ธ๋“œ ์ˆ˜ ๋งŒํผ ๊ธธ์ด๊ฐ€ ๊ฒฐ์ •๋˜๋ฏ€๋กœ 0(n)
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number} target
4+
* @return {number}
5+
*/
6+
var search = function (nums, target) {
7+
const pivotIndex = findPivot(nums);
8+
9+
const firstHalfResult = findIndex(nums, 0, pivotIndex - 1, target);
10+
11+
return firstHalfResult === -1 ? findIndex(nums, pivotIndex, nums.length - 1, target) : firstHalfResult;
12+
};
13+
14+
function findIndex(nums, start, end, target) {
15+
while (start <= end) {
16+
// console.log(start, end, target)
17+
const mid = start + Math.floor((end - start) / 2);
18+
19+
const midValue = nums[mid];
20+
21+
if (midValue === target) {
22+
return mid;
23+
}
24+
25+
if (nums[start] === target) {
26+
return start;
27+
}
28+
29+
if (nums[end] === target) {
30+
return end;
31+
}
32+
33+
if (nums[mid] < target) {
34+
start = mid + 1;
35+
} else if (nums[mid] > target) {
36+
end = mid - 1;
37+
}
38+
}
39+
40+
return -1;
41+
}
42+
43+
44+
function findPivot(nums) {
45+
let low = 0;
46+
let high = nums.length - 1;
47+
48+
while (low <= high) {
49+
const mid = low + Math.floor((high - low) / 2);
50+
51+
if (0 < mid && nums[mid - 1] > nums[mid]) {
52+
return mid;
53+
}
54+
55+
if (nums[0] <= nums[mid]) {
56+
low = mid + 1;
57+
} else {
58+
high = mid - 1;
59+
}
60+
61+
}
62+
63+
return 0;
64+
}
65+
66+
// ์‹œ๊ฐ„๋ณต์žก๋„ O(logn) -> ํ”ผ๋ด‡, ์ตœ์†Œ๊ฐ’์„ ์ฐพ์„ ๋•Œ ์ด์ง„ํƒ์ƒ‰์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ
67+
// ๊ณต๊ฐ„๋ณต์žก๋„ O(1) -> ๊ณ ์ •๋œ ๋ณ€์ˆ˜ ์‚ฌ์šฉ ์ด์™ธ์—๋Š” ๋™์ ์ธ ๋ฐฐ์—ด, ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ

0 commit comments

Comments
ย (0)