Imagine you're a college student planning your course schedule for graduation. You need to take numCourses different courses, numbered from 0 to numCourses - 1. However, some courses have prerequisites - you must complete certain courses before taking others.

You're given an array prerequisites where each element [a, b] means you must take course b before you can take course a. For example, [0, 1] means you need to complete course 1 first before taking course 0.

Your goal: Determine if it's possible to finish all courses without getting stuck in impossible prerequisite loops. Return true if you can complete all courses, false otherwise.

This is essentially asking: "Does the prerequisite dependency graph contain a cycle?" If there's a cycle, it's impossible to satisfy all prerequisites.

Input & Output

example_1.py โ€” Basic Valid Case
$ Input: numCourses = 2, prerequisites = [[1,0]]
โ€บ Output: true
๐Ÿ’ก Note: To take course 1, you need to complete course 0 first. This is possible: take course 0, then course 1.
example_2.py โ€” Circular Dependency
$ Input: numCourses = 2, prerequisites = [[1,0],[0,1]]
โ€บ Output: false
๐Ÿ’ก Note: Course 1 requires course 0, but course 0 also requires course 1. This creates a circular dependency that cannot be resolved.
example_3.py โ€” Complex Valid Case
$ Input: numCourses = 4, prerequisites = [[1,0],[2,0],[3,1],[3,2]]
โ€บ Output: true
๐Ÿ’ก Note: Take courses in order: 0 โ†’ 1,2 โ†’ 3. Course 0 has no prerequisites, courses 1&2 need 0, course 3 needs both 1&2.

Visualization

Tap to expand
Course Dependency Graphโœ“ Valid CaseMathPhysCalcNo cycles โ†’ Solvableโœ— Invalid CaseABA requires B, B requires ACycle detected โ†’ ImpossibleDFS Algorithm: Mark nodes as visiting/visited to detect back edges (cycles)Time Complexity: O(V + E)V = number of coursesE = number of prerequisites
Understanding the Visualization
1
Model as Graph
Each course is a node, prerequisites are directed edges
2
Detect Cycles
Use DFS with three states to find circular dependencies
3
Return Result
No cycles = possible to complete all courses
Key Takeaway
๐ŸŽฏ Key Insight: Convert the course scheduling problem into cycle detection in a directed graph. If any cycle exists in the prerequisite dependencies, it's impossible to complete all courses.

Time & Space Complexity

Time Complexity
โฑ๏ธ
O(V + E)

Visit each vertex once and traverse each edge once, where V=numCourses, E=prerequisites

n
2n
โœ“ Linear Growth
Space Complexity
O(V + E)

Adjacency list storage plus recursion stack depth

n
2n
โœ“ Linear Space

Constraints

  • 1 โ‰ค numCourses โ‰ค 2000
  • 0 โ‰ค prerequisites.length โ‰ค 5000
  • prerequisites[i].length == 2
  • 0 โ‰ค ai, bi < numCourses
  • All the pairs prerequisites[i] are unique
Asked in
Google 73 Amazon 45 Meta 38 Microsoft 29 Apple 22
67.8K Views
High Frequency
~18 min Avg. Time
1.8K Likes
Ln 1, Col 1
Smart Actions
๐Ÿ’ก Explanation
AI Ready
๐Ÿ’ก Suggestion Tab to accept Esc to dismiss
// Output will appear here after running code
Code Editor Closed
Click the red button to reopen