Menu
CoddyTech

Course Schedule

There are numCourses courses, numbered 0 to numCourses-1. Each pair [a, b] in prerequisites means you have to finish course b before you start course a. Return true if some order lets you finish every course, and false if none does.

Function

canFinish(numCourses: integer, prerequisites: integer-2d-array) → boolean
numCoursesinteger
the number of courses
prerequisitesinteger-2d-array
the pairs [a, b], each meaning course b comes before course a
Returnsboolean
true if every course can be finished, false otherwise

Constraints

  • 1 ≤ numCourses ≤ 105
  • 1 ≤ prerequisites.length ≤ 5000
  • Each pair [a, b] has 0 ≤ a, b < numCourses.
  • No pair appears twice.
  • A pair may name the same course twice, [a, a]. That course needs itself first, so it can never be taken.

Examples

Input
numCourses = 4prerequisites = [[1, 0], [2, 1], [3, 1]]
Output
true
Explanation
Course 0 has no prerequisites, so you take it first. That frees course 1, which frees 2 and 3, so the order 0, 1, 2, 3 works.
challenge icon

Follow-up

Any number of courses fit in one term, as long as each course's prerequisites were finished in earlier terms. What is the fewest terms that cover every course?

Reset code
def canFinish(numCourses, prerequisites):
    # Write code here

Test #1

Test #2

Arguments

numCourses = 4
prerequisites = [[1, 0], [2, 1], [3, 1]]

Expected Output

true