207. Course Schedule

There are a total of n courses you have to take, labeled from 0 to n-1.

Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which is expressed as a pair: [0,1]

Given the total number of courses and a list of prerequisite pairs, is it possible for you to finish all courses?

Example 1:

Input:
 2, [[1,0]] 

Output: 
true

Explanation:
 There are a total of 2 courses to take. 
             To take course 1 you should have finished course 0. So it is possible.

Example 2:

Input:
 2, [[1,0],[0,1]]

Output: 
false

Explanation:
 There are a total of 2 courses to take. 
             To take course 1 you should have finished course 0, and to take course 0 you should
             also have finished course 1. So it is impossible.

Note:

  1. The input prerequisites is a graph represented by a list of edges , not adjacency matrices. Read more about how a graph is represented .
  2. You may assume that there are no duplicate edges in the input prerequisites.

Solution

(1) Java

class Solution {
    public boolean canFinish(int numCourses, int[][] prerequisites) {
        if (prerequisites == null || prerequisites.length == 0 || prerequisites[0].length == 0) {
            return true;
        }
        Set<Integer>[] list = new HashSet[numCourses];
        for (int i = 0; i < numCourses; i++) {
            list[i] = new HashSet<Integer>();
        }
        for (int[] prerequisite : prerequisites) {
            list[prerequisite[0]].add(prerequisite[1]);
        }
        Queue<Integer> q = new LinkedList<>();
        for (int i = 0; i < numCourses; i++) {
            Set<Integer> l = list[i];
            if (l.size() == 0) {
                q.offer(i);
            }
        }
        if (q.size() == 0) {
            return false;
        }
        int count = 0;
        while (q.size() > 0) {
            int course = q.poll();
            count++;
            for (int i = 0; i < numCourses; i++) {
                Set<Integer> l = list[i];
                if (!l.isEmpty() && l.contains(course)) {
                    l.remove(course);
                    if (l.isEmpty()) {
                        q.offer(i);
                    }
                }
            }
        }
        return count == numCourses;
    }
}

(2) Python



(3) Scala



results matching ""

    No results matching ""