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 can start course a. Return true if there is an order in which you can finish every course, and false if there is none.

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, and course 1 frees both 2 and 3, so the order 0, 1, 2, 3 works.

lock icon+20 hidden tests on Submit

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 smallest number of terms that covers every course?

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

Case 1

Case 2

Input

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

Expected

true