Skip to content

Commit 6e78b52

Browse files
authored
Merge pull request #1626 from hoyeongkwak/main
[hoyeongkwak] Week13 Solutions
2 parents eb04063 + 245aa4c commit 6e78b52

File tree

4 files changed

+134
-0
lines changed

4 files changed

+134
-0
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
class MedianFinder {
2+
arr: number[]
3+
constructor() {
4+
this.arr = []
5+
}
6+
/*
7+
Time Complexity: O(logn)
8+
Space Complexity: O(n)
9+
*/
10+
addNum(num: number): void {
11+
let left = 0
12+
let right = this.arr.length
13+
14+
while (left < right) {
15+
const mid = Math.floor((left + right) / 2)
16+
if (this.arr[mid] < num) {
17+
left = mid + 1
18+
} else {
19+
right = mid
20+
}
21+
}
22+
this.arr.splice(left, 0, num)
23+
}
24+
/*
25+
Time Complexity: O(1)
26+
Space Complexity: O(n)
27+
*/
28+
findMedian(): number {
29+
const n = this.arr.length
30+
if (n % 2 === 0) {
31+
return (this.arr[n / 2 - 1] + this.arr[n / 2]) / 2
32+
} else {
33+
return (this.arr[Math.floor(n / 2)])
34+
}
35+
}
36+
}
37+
38+
/**
39+
* Your MedianFinder object will be instantiated and called as such:
40+
* var obj = new MedianFinder()
41+
* obj.addNum(num)
42+
* var param_2 = obj.findMedian()
43+
*/

insert-interval/hoyeongkwak.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/*
2+
Time Complexity: O(n)
3+
Space Complexity: O(n)
4+
*/
5+
function insert(intervals: number[][], newInterval: number[]): number[][] {
6+
const newIntervals = []
7+
let idx = 0
8+
const n = intervals.length
9+
while (idx < n && intervals[idx][1] < newInterval[0]) {
10+
newIntervals.push(intervals[idx])
11+
idx++
12+
}
13+
14+
while (idx < n && intervals[idx][0] <= newInterval[1]) {
15+
newInterval[0] = Math.min(newInterval[0], intervals[idx][0])
16+
newInterval[1] = Math.max(newInterval[1], intervals[idx][1])
17+
idx++
18+
}
19+
newIntervals.push(newInterval)
20+
21+
while (idx < n) {
22+
newIntervals.push(intervals[idx])
23+
idx++
24+
}
25+
return newIntervals
26+
};
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
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(h + k)
16+
Space Complexity: O(h)
17+
*/
18+
function kthSmallest(root: TreeNode | null, k: number): number {
19+
let count = 0
20+
let result = -1
21+
const inOrder = (node: TreeNode | null): void => {
22+
if (node == null || count >= k) return
23+
24+
inOrder(node.left)
25+
count++
26+
if (count === k) {
27+
result = node.val
28+
return
29+
}
30+
inOrder(node.right)
31+
}
32+
inOrder(root)
33+
return result
34+
};
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
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(logn)
16+
Space Complexity: O(1)
17+
*/
18+
function lowestCommonAncestor(root: TreeNode | null, p: TreeNode | null, q: TreeNode | null): TreeNode | null {
19+
if (!root || !p || !q) return null;
20+
let node = root
21+
while (node) {
22+
if (p.val < node.val && q.val < node.val) {
23+
node = node.left
24+
} else if (p.val > node.val && q.val > node.val) {
25+
node = node.right
26+
} else {
27+
return node
28+
}
29+
}
30+
return null
31+
};

0 commit comments

Comments
 (0)