Skip to content

Commit 1d76cbb

Browse files
authored
Merge pull request #1596 from HoonDongKang/main
[HoonDongKang] week 12 solutions
2 parents aad8f28 + d60724c commit 1d76cbb

File tree

5 files changed

+253
-0
lines changed

5 files changed

+253
-0
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/**
2+
* [Problem]: [435] Non-overlapping Intervals
3+
* (https://leetcode.com/problems/non-overlapping-intervals/description/)
4+
*/
5+
6+
//시간복잡도 O(n log n)
7+
//공간복잡도 O(1)
8+
function eraseOverlapIntervals(intervals: number[][]): number {
9+
intervals.sort((a, b) => a[1] - b[1]);
10+
11+
let count = 0;
12+
let prev = intervals[0][1];
13+
14+
for (let i = 1; i < intervals.length; i++) {
15+
let [start, end] = intervals[i];
16+
17+
if (prev > start) {
18+
count++;
19+
} else {
20+
prev = end;
21+
}
22+
}
23+
24+
return count;
25+
}
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
/**
2+
* [Problem]: [3651] Number of Connected Components in an Undirected Graph
3+
* (https://www.lintcode.com/problem/3651/)
4+
*/
5+
export class Solution {
6+
/**
7+
* @param n: the number of vertices
8+
* @param edges: the edges of undirected graph
9+
* @return: the number of connected components
10+
*/
11+
countComponents(n: number, edges: number[][]): number {
12+
//시간복잡도 O(n + e)
13+
// 공간복잡도 O(n + e)
14+
function dfsFunc(n: number, edges: number[][]): number {
15+
const visited = new Array(n).fill(false);
16+
const graph: number[][] = Array.from({ length: n }, () => []);
17+
18+
for (const [node, adjacent] of edges) {
19+
graph[node].push(adjacent);
20+
graph[adjacent].push(node);
21+
}
22+
23+
function dfs(node: number) {
24+
visited[node] = true;
25+
for (const neighbor of graph[node]) {
26+
if (!visited[neighbor]) {
27+
dfs(neighbor);
28+
}
29+
}
30+
}
31+
32+
let count = 0;
33+
34+
for (let i = 0; i < n; i++) {
35+
if (!visited[i]) {
36+
count++;
37+
dfs(i);
38+
}
39+
}
40+
41+
return count;
42+
}
43+
// 시간복잡도 O(n + e)
44+
// 공간복잡도 O(n + e)
45+
function stackFunc(n: number, edges: number[][]): number {
46+
const visited = new Array(n).fill(false);
47+
const graph: number[][] = Array.from({ length: n }, () => []);
48+
let count = 0;
49+
50+
for (const [node, adjacent] of edges) {
51+
graph[node].push(adjacent);
52+
graph[adjacent].push(node);
53+
}
54+
55+
for (let i = 0; i < n; i++) {
56+
if (visited[i]) continue;
57+
count++;
58+
const stack = [i];
59+
60+
while (stack.length) {
61+
const node = stack.pop()!;
62+
visited[node] = true;
63+
64+
for (let adj of graph[node]) {
65+
if (!visited[adj]) stack.push(adj);
66+
}
67+
}
68+
}
69+
70+
return count;
71+
}
72+
}
73+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/**
2+
* [Problem]: [19] Remove Nth Node From End of List
3+
* (https://leetcode.com/problems/remove-nth-node-from-end-of-list/description/)
4+
*/
5+
6+
class ListNode {
7+
val: number;
8+
next: ListNode | null;
9+
constructor(val?: number, next?: ListNode | null) {
10+
this.val = val === undefined ? 0 : val;
11+
this.next = next === undefined ? null : next;
12+
}
13+
}
14+
15+
function removeNthFromEnd(head: ListNode | null, n: number): ListNode | null {
16+
// 시간복잡도 O(N)
17+
// 공간복잡도 O(1)
18+
function lengthFunc(head: ListNode | null, n: number): ListNode | null {
19+
let length = 0;
20+
let current = head;
21+
while (current) {
22+
length++;
23+
current = current.next;
24+
}
25+
26+
let dummy = new ListNode(0, head);
27+
current = dummy;
28+
29+
for (let i = 0; i < length - n; i++) {
30+
current = current?.next!;
31+
}
32+
33+
current.next = current.next!.next || null;
34+
35+
return dummy.next;
36+
}
37+
38+
// 시간복잡도 O(N)
39+
// 공간복잡도 O(1)
40+
function twoPointerFunc(head: ListNode | null, n: number): ListNode | null {
41+
let first = head;
42+
43+
for (let i = 0; i < n; i++) {
44+
first = first?.next!;
45+
}
46+
47+
let dummy = new ListNode(0, head);
48+
let second = dummy;
49+
50+
while (first) {
51+
first = first.next;
52+
second = second.next!;
53+
}
54+
55+
second.next = second.next?.next || null;
56+
return dummy.next;
57+
}
58+
}

same-tree/HoonDongKang.ts

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/**
2+
* [Problem]: [100] Same Tree
3+
* (https://leetcode.com/problems/same-tree/description/)
4+
*/
5+
6+
class TreeNode {
7+
val: number;
8+
left: TreeNode | null;
9+
right: TreeNode | null;
10+
constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
11+
this.val = val === undefined ? 0 : val;
12+
this.left = left === undefined ? null : left;
13+
this.right = right === undefined ? null : right;
14+
}
15+
}
16+
17+
function isSameTree(p: TreeNode | null, q: TreeNode | null): boolean {
18+
// 시간복잡도 O(N)
19+
// 공간복잡도 O(N)
20+
function recursiveFunc(p: TreeNode | null, q: TreeNode | null): boolean {
21+
if (!p && !q) return true;
22+
if (!p || !q) return false;
23+
if (p.val !== q.val) return false;
24+
return recursiveFunc(p.left, q.left) && recursiveFunc(p.right, q.right);
25+
}
26+
27+
// 시간복잡도 O(N)
28+
// 공간복잡도 O(N)
29+
function stackFunc(p: TreeNode | null, q: TreeNode | null): boolean {
30+
const stack = [[p, q]];
31+
while (stack.length) {
32+
const [p, q] = stack.pop()!;
33+
if (!p && !q) continue;
34+
if (!p || !q) return false;
35+
if (p.val !== q.val) return false;
36+
37+
stack.push([p.left, q.left]);
38+
stack.push([p.right, q.right]);
39+
}
40+
41+
return true;
42+
}
43+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/**
2+
* [Problem]: [297] Serialize and Deserialize Binary Tree
3+
* (\https://leetcode.com/problems/serialize-and-deserialize-binary-tree/description/)
4+
*/
5+
6+
class TreeNode {
7+
val: number;
8+
left: TreeNode | null;
9+
right: TreeNode | null;
10+
constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
11+
this.val = val === undefined ? 0 : val;
12+
this.left = left === undefined ? null : left;
13+
this.right = right === undefined ? null : right;
14+
}
15+
}
16+
17+
/*
18+
* Encodes a tree to a single string.
19+
*/
20+
//시간복잡도 O(N)
21+
//공간복잡도 O(N)
22+
function serialize(root: TreeNode | null): string {
23+
if (!root) return "NULL";
24+
25+
const left = serialize(root.left);
26+
const right = serialize(root.right);
27+
28+
return `${root.val},${left},${right}`;
29+
}
30+
31+
/*
32+
* Decodes your encoded data to tree.
33+
*/
34+
//시간복잡도 O(N)
35+
//공간복잡도 O(N)
36+
function deserialize(data: string): TreeNode | null {
37+
const values = data.split(",");
38+
let index = 0;
39+
40+
function dfs(): TreeNode | null {
41+
if (values[index] === "NULL") {
42+
index++;
43+
return null;
44+
}
45+
const node = new TreeNode(+values[index++]);
46+
47+
node.left = dfs();
48+
node.right = dfs();
49+
50+
return node;
51+
}
52+
53+
return dfs();
54+
}

0 commit comments

Comments
 (0)