File tree Expand file tree Collapse file tree 1 file changed +43
-0
lines changed Expand file tree Collapse file tree 1 file changed +43
-0
lines changed Original file line number Diff line number Diff line change
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
You can’t perform that action at this time.
0 commit comments