Course Schedule

medium

You must take numCourses courses labelled 0 .. numCourses-1. Some have prerequisites: prerequisites[i] = [a, b] means you must take course b before course a. Return true if you can finish all courses, and false otherwise.

Hints

Model prerequisites as a directed graph: [a, b] means an edge b -> a.
You can finish all courses iff this graph has no directed cycle.
Use Kahn's algorithm (order all courses) or DFS (detect a back edge).

Common doubts

[a, b] means 'b before a', so the dependency edge is b -> a.
A DAG has a topological order — a valid sequence to take the courses; a cycle makes some courses mutually blocked.
Either — both O(V+E). Kahn also yields a valid order; DFS also pinpoints the blocking cycle.

Interview follow-ups

That's Course Schedule II — output the topological order (or empty if a cycle exists).
A self-loop is an immediate cycle, so it's unfinishable.

Fun facts

  • LeetCode 207 — the canonical 'is it a DAG?' interview question.
  • The same model handles build systems, package managers, and spreadsheet recalculation.

Asked at

AmazonMicrosoftGoogle
Frequently Sometimes Occasionally
Example 1
Input: numCourses = 2, prerequisites = [[1,0]]
Output: true
Take 0, then 1.
Example 2
Input: numCourses = 2, prerequisites = [[1,0],[0,1]]
Output: false
0 and 1 each require the other — a cycle.
Constraints

- 1 <= numCourses <= 10^5 - 0 <= prerequisites.length <= 10^5 - no duplicate prerequisite pairs

Solve this problem →