Skip to content

Commit c016196

Browse files
authored
[oh-chaeyeon] 24.11.26 (#109)
* 56 / Merge Intervals / Medium / 23m 25s * 1584 / Min Cost to Connect all points / Medium / 1h+ * 235 / Lowest Common ancestor of a Binary Search Tree / Medium / 9m 37s * 139 / Word Break / Medium / 12m 49s * 215 / Kth largest element in an Array / Medium / 30m+
1 parent c9840fb commit c016196

File tree

5 files changed

+176
-0
lines changed

5 files changed

+176
-0
lines changed

oh-chaeyeon/139_Word_Break.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/**
2+
* @param {string} s
3+
* @param {string[]} wordDict
4+
* @return {boolean}
5+
*/
6+
var wordBreak = function (s, wordDict) {
7+
const wordSet = new Set(wordDict);
8+
const dp = new Array(s.length + 1).fill(false);
9+
dp[0] = true;
10+
11+
for (let i = 1; i <= s.length; i++) {
12+
for (const word of wordSet) {
13+
const wordLength = word.length;
14+
if (
15+
i >= wordLength &&
16+
dp[i - wordLength] &&
17+
s.substring(i - wordLength, i) === word
18+
) {
19+
dp[i] = true;
20+
break;
21+
}
22+
}
23+
}
24+
25+
return dp[s.length];
26+
};
27+
28+
// Time taken : 12m 49s
29+
// Runtime : 3ms
30+
// Memory : 51.24MB
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/**
2+
* @param {number[][]} points
3+
* @return {number}
4+
*/
5+
var minCostConnectPoints = function (points) {
6+
const n = points.length;
7+
const dist = new Array(n).fill(Infinity);
8+
const visited = new Array(n).fill(false);
9+
dist[0] = 0;
10+
let cost = 0;
11+
12+
for (let i = 0; i < n; i++) {
13+
let minCost = Infinity;
14+
let currentNode = -1;
15+
16+
for (let j = 0; j < n; j++) {
17+
if (!visited[j] && dist[j] < minCost) {
18+
minCost = dist[j];
19+
currentNode = j;
20+
}
21+
}
22+
23+
visited[currentNode] = true;
24+
cost += minCost;
25+
26+
for (let nextNode = 0; nextNode < n; nextNode++) {
27+
if (!visited[nextNode]) {
28+
const manhattanDistance =
29+
Math.abs(points[currentNode][0] - points[nextNode][0]) +
30+
Math.abs(points[currentNode][1] - points[nextNode][1]);
31+
dist[nextNode] = Math.min(dist[nextNode], manhattanDistance);
32+
}
33+
}
34+
}
35+
36+
return cost;
37+
};
38+
39+
// Time taken : 1h+
40+
// Runtime : 33ms
41+
// Memory : 52.37MB
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number} k
4+
* @return {number}
5+
*/
6+
var findKthLargest = function (nums, k) {
7+
const maxHeap = new MaxPriorityQueue();
8+
9+
for (const num of nums) {
10+
maxHeap.enqueue(num);
11+
}
12+
13+
for (let i = 0; i < k - 1; i++) {
14+
maxHeap.dequeue();
15+
}
16+
return maxHeap.front().element;
17+
};
18+
19+
// Time taken : 16m 50s
20+
// Runtime : 148ms
21+
// Memory : 77.60MB
22+
23+
//----------------------------------------------------
24+
25+
/**
26+
* @param {number[]} nums
27+
* @param {number} k
28+
* @return {number}
29+
*/
30+
var findKthLargest = function (nums, k) {
31+
const offset = 10000;
32+
const count = new Array(20001).fill(0);
33+
34+
for (let num of nums) {
35+
count[num + offset]++;
36+
}
37+
38+
let total = 0;
39+
for (let i = count.length - 1; i >= 0; i--) {
40+
total += count[i];
41+
if (total >= k) return i - offset;
42+
}
43+
};
44+
45+
// Runtime : 5ms
46+
// Memory : 58.40MB
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* function TreeNode(val) {
4+
* this.val = val;
5+
* this.left = this.right = null;
6+
* }
7+
*/
8+
9+
/**
10+
* @param {TreeNode} root
11+
* @param {TreeNode} p
12+
* @param {TreeNode} q
13+
* @return {TreeNode}
14+
*/
15+
var lowestCommonAncestor = function (root, p, q) {
16+
while (root) {
17+
if (p.val < root.val && q.val < root.val) {
18+
root = root.left;
19+
} else if (p.val > root.val && q.val > root.val) {
20+
root = root.right;
21+
} else {
22+
return root;
23+
}
24+
}
25+
return null;
26+
};
27+
28+
// Time taken : 9m 37s
29+
// Runtime : 56ms
30+
// Memory : 58.70MB

oh-chaeyeon/56_Merge_Intervals.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/**
2+
* @param {number[][]} intervals
3+
* @return {number[][]}
4+
*/
5+
var merge = function (intervals) {
6+
if (intervals.length === 0) return [];
7+
intervals.sort((a, b) => a[0] - b[0]);
8+
9+
const merged = [intervals[0]];
10+
11+
for (let i = 1; i < intervals.length; i++) {
12+
const current = intervals[i];
13+
14+
if (current[0] <= merged[merged.length - 1][1]) {
15+
merged[merged.length - 1][1] = Math.max(
16+
merged[merged.length - 1][1],
17+
current[1]
18+
);
19+
} else {
20+
merged.push(current);
21+
}
22+
}
23+
24+
return merged;
25+
};
26+
27+
// Time taken : 23m 25s
28+
// Runtime : 7ms
29+
// Memory : 59.04MB

0 commit comments

Comments
 (0)