Skip to content

Commit dce73ca

Browse files
committed
solve: courseSchedule
1 parent c94b44c commit dce73ca

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

course-schedule/yolophg.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# Time Complexity: O(V + E) - visit each course once and process all edges
2+
# Space Complexity: O(V + E) - storing the graph + recursion stack (worst case)
3+
4+
class Solution:
5+
def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:
6+
7+
# Build the adjacency list (prereq map)
8+
preMap = {i: [] for i in range(numCourses)}
9+
for crs, pre in prerequisites:
10+
preMap[crs].append(pre)
11+
12+
# tracks courses currently being checked (for cycle detection)
13+
visited = set()
14+
15+
def dfs(crs):
16+
# found a cycle
17+
if crs in visited:
18+
return False
19+
# no more prereqs left
20+
if preMap[crs] == []:
21+
return True
22+
23+
# mark as visiting
24+
visited.add(crs)
25+
26+
# check all prereqs for this course
27+
for pre in preMap[crs]:
28+
if not dfs(pre):
29+
# cycle detected, return False
30+
return False
31+
32+
# done checking, remove from visited
33+
visited.remove(crs)
34+
# mark as completed
35+
preMap[crs] = []
36+
return True
37+
38+
# run dfs on every course
39+
for crs in range(numCourses):
40+
if not dfs(crs):
41+
return False
42+
43+
return True

0 commit comments

Comments
 (0)