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.

Constraints

  • 1 โ‰ค numCourses โ‰ค 2000
  • 0 โ‰ค prerequisites.length โ‰ค 5000
  • prerequisites[i].length == 2
  • 0 โ‰ค ai, bi < numCourses
  • All the pairs prerequisites[i] are unique

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.
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