Course Schedule
There are a total of numCourses
courses you have to take, labeled from 0
to numCourses - 1
. You are given an array prerequisites
where prerequisites[i] = [ai, bi]
indicates that you must take course bi
first if you want to take course ai
.
For example, the pair
[0, 1]
, indicates that to take course0
you have to first take course1
.
Return true
if you can finish all courses. Otherwise, return false
.
Example 1:
Example 2:
Constraints:
1 <= numCourses <= 2000
0 <= prerequisites.length <= 5000
prerequisites[i].length == 2
0 <= ai, bi < numCourses
All the pairs prerequisites[i] are unique.
Solutions
The problem you’re describing is a classic one related to detecting a cycle in a directed graph. Each course can be represented as a node in the graph, and the prerequisite relationship can be represented as a directed edge. If the graph contains a cycle, that means there are some courses that depend on each other in a circular way, so it’s impossible to finish all courses.
Approach - BFS
The time complexity of this algorithm is also O(N + E), where N is the number of courses and E is the number of prerequisites.
The space complexity of the algorithm is O(N + E), where N is the number of courses and E is the number of prerequisites. This is because we are storing the edges and indegrees of the graph, which in total can be up to N + E. Specifically:
The
indegree
array takes O(N) space.The
edges
list takes O(E) space.The
queue
can hold all nodes in the worst case, so it also takes O(N) space.
So, the total space complexity is O(N + E).
Last updated