Skip to content

Commit d08593e

Browse files
author
beck chen
committed
add flood fill and course schedule
1 parent eabb3be commit d08593e

File tree

3 files changed

+75
-1
lines changed

3 files changed

+75
-1
lines changed

Leetcode Visuals/Trees and Graphs.drawio

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
var canFinish = function (numCourses, prerequisites) {
2+
const courseToPrereqMap = {};
3+
const isOnCurrentPath = {};
4+
const isVisited = {};
5+
6+
for (let ii = 0; ii < prerequisites.length; ii++) {
7+
const [course, prereq] = prerequisites[ii];
8+
courseToPrereqMap[course] = !courseToPrereqMap[course] ? [prereq] : [...courseToPrereqMap[course], prereq]
9+
}
10+
11+
const courseNums = Object.keys(courseToPrereqMap);
12+
for (let ii = 0; ii < courseNums.length; ii++) {
13+
const courseNum = courseNums[ii];
14+
if (hasCycle(courseNum)) {
15+
return false;
16+
}
17+
}
18+
19+
function hasCycle(courseNum) {
20+
if (isOnCurrentPath[courseNum]) {
21+
return true;
22+
}
23+
24+
if (isVisited[courseNum]) {
25+
return false;
26+
}
27+
28+
if (!courseToPrereqMap[courseNum] || courseToPrereqMap[courseNum].length === 0) {
29+
return false;
30+
}
31+
32+
isOnCurrentPath[courseNum] = true;
33+
const prereqs = courseToPrereqMap[courseNum];
34+
for (let ii = 0; ii < prereqs.length; ii++) {
35+
const prereqNum = prereqs[ii];
36+
if (hasCycle(prereqNum)) {
37+
return true;
38+
}
39+
}
40+
41+
isOnCurrentPath[courseNum] = false;
42+
isVisited[courseNum] = true;
43+
44+
return false;
45+
}
46+
47+
return true;
48+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/**
2+
* @param {number[][]} image
3+
* @param {number} sr
4+
* @param {number} sc
5+
* @param {number} newColor
6+
* @return {number[][]}
7+
*/
8+
9+
var floodFill = function (image, sr, sc, newColor) {
10+
function traverse(image, rowIndex, colIndex, oldColor, newColor) {
11+
const indexOOB = rowIndex < 0 || colIndex < 0 || rowIndex >= image.length || colIndex >= image[0].length;
12+
if (indexOOB || image[rowIndex][colIndex] !== oldColor || image[rowIndex][colIndex] === newColor) {
13+
return;
14+
}
15+
16+
image[rowIndex][colIndex] = newColor;
17+
traverse(image, rowIndex + 1, colIndex, oldColor, newColor);
18+
traverse(image, rowIndex - 1, colIndex, oldColor, newColor);
19+
traverse(image, rowIndex, colIndex + 1, oldColor, newColor);
20+
traverse(image, rowIndex, colIndex - 1, oldColor, newColor);
21+
}
22+
23+
const oldColor = image[sr][sc];
24+
traverse(image, sr, sc, oldColor, newColor);
25+
return image;
26+
}

0 commit comments

Comments
 (0)