Skip to content

Commit 4387c42

Browse files
authored
Merge pull request #1928 from hyer0705/main
2 parents 36393ff + 9df0c8a commit 4387c42

File tree

5 files changed

+172
-0
lines changed

5 files changed

+172
-0
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* class TreeNode {
4+
* val: number
5+
* left: TreeNode | null
6+
* right: TreeNode | null
7+
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
8+
* this.val = (val===undefined ? 0 : val)
9+
* this.left = (left===undefined ? null : left)
10+
* this.right = (right===undefined ? null : right)
11+
* }
12+
* }
13+
*/
14+
15+
// Time Complexity: O(n)
16+
// Space Complexity: O(h) where h is the height of the tree
17+
function maxPathSum(root: TreeNode | null): number {
18+
let maximumSum = -Infinity;
19+
20+
const dfs = (node: TreeNode | null) => {
21+
if (!node) return 0;
22+
23+
let leftResult = dfs(node.left);
24+
let rightResult = dfs(node.right);
25+
26+
leftResult = Math.max(0, leftResult);
27+
rightResult = Math.max(0, rightResult);
28+
29+
maximumSum = Math.max(maximumSum, node.val + leftResult + rightResult);
30+
31+
return node.val + Math.max(leftResult, rightResult);
32+
};
33+
34+
dfs(root);
35+
36+
return maximumSum;
37+
}

graph-valid-tree/hyer0705.ts

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
// Time Complexity: O(n)
2+
// Space Complexity: O(n)
3+
export class Solution {
4+
/**
5+
* @param n: An integer
6+
* @param edges: a list of undirected edges
7+
* @return: true if it's a valid tree, or false
8+
*/
9+
validTree(n: number, edges: number[][]): boolean {
10+
if (n === 0) return true;
11+
if (edges.length !== n - 1) return false;
12+
13+
const graph: number[][] = Array.from({ length: n }, () => []);
14+
15+
for (const [s, e] of edges) {
16+
graph[s].push(e);
17+
graph[e].push(s);
18+
}
19+
20+
const visited = new Set<number>();
21+
22+
const queue = [0];
23+
visited.add(0);
24+
25+
let pointer = 0;
26+
while (pointer < queue.length) {
27+
const currentNode = queue[pointer++];
28+
29+
for (const nextNode of graph[currentNode]) {
30+
if (!visited.has(nextNode)) {
31+
queue.push(nextNode);
32+
visited.add(nextNode);
33+
}
34+
}
35+
}
36+
37+
return visited.size === n;
38+
}
39+
}

merge-intervals/hyer0705.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// Time Complexity: O(n log n)
2+
// Space Complexity: O(n)
3+
function merge(intervals: number[][]): number[][] {
4+
const merged: number[][] = [];
5+
6+
intervals.sort((a, b) => a[0] - b[0]);
7+
8+
for (const [currentStart, currentEnd] of intervals) {
9+
if (merged.length === 0 || merged[merged.length - 1][1] < currentStart) {
10+
merged.push([currentStart, currentEnd]);
11+
} else {
12+
const lastMerged = merged[merged.length - 1];
13+
lastMerged[1] = Math.max(lastMerged[1], currentEnd);
14+
}
15+
}
16+
17+
return merged;
18+
}

missing-number/hyer0705.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// Time Complexity: O(n)
2+
// Space Complexity: O(1)
3+
function missingNumber(nums: number[]): number {
4+
const n = nums.length;
5+
6+
const expectedSum = (n * (n + 1)) / 2;
7+
const currentSum = nums.reduce((acc, curr) => acc + curr, 0);
8+
9+
return expectedSum - currentSum;
10+
}
11+
12+
// Time Complexity: O(n^2)
13+
// Space Complexity: O(1)
14+
function missingNumber(nums: number[]): number {
15+
const n = nums.length;
16+
17+
for (let i = 0; i <= n; i++) {
18+
if (!nums.includes(i)) return i;
19+
}
20+
21+
return -1;
22+
}

reorder-list/hyer0705.ts

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* class ListNode {
4+
* val: number
5+
* next: ListNode | null
6+
* constructor(val?: number, next?: ListNode | null) {
7+
* this.val = (val===undefined ? 0 : val)
8+
* this.next = (next===undefined ? null : next)
9+
* }
10+
* }
11+
*/
12+
13+
// Time Complexity: O(n)
14+
// Space Complexity: O(1)
15+
/**
16+
Do not return anything, modify head in-place instead.
17+
*/
18+
function reorderList(head: ListNode | null): void {
19+
if (!head || !head.next || !head.next.next) return;
20+
21+
let slow: ListNode | null = head;
22+
let fast: ListNode | null = head;
23+
24+
// find central node
25+
while (fast && fast.next) {
26+
slow = slow.next;
27+
fast = fast.next.next;
28+
}
29+
30+
let secondHalf = slow.next;
31+
slow.next = null;
32+
33+
// reverse secondHalf
34+
let prev = null;
35+
let curr = secondHalf;
36+
while (curr) {
37+
const nextTemp = curr.next;
38+
curr.next = prev;
39+
prev = curr;
40+
curr = nextTemp;
41+
}
42+
43+
let first = head;
44+
let second = prev;
45+
46+
while (second) {
47+
const firstNext = first.next;
48+
const secondNext = second.next;
49+
50+
first.next = second;
51+
second.next = firstNext;
52+
53+
first = firstNext;
54+
second = secondNext;
55+
}
56+
}

0 commit comments

Comments
 (0)