207.Course Schedule

Topological Sort

1- BFS

class Solution {
    //O(V+E)
    public boolean canFinish(int numCourses, int[][] prerequisites) {
        int[][] matrix = new int[numCourses][numCourses];
        int[] indegree = new int[numCourses];
        //E Part
        for(int[] pre : prerequisites){
            int preCourse = pre[1];
            int readyCourse = pre[0];
            indegree[readyCourse]++;
            matrix[preCourse][readyCourse] = 1;
        }

        Deque<Integer> queue = new ArrayDeque<>();
        for(int i = 0 ; i < numCourses; i++){
            if(indegree[i] == 0)
                queue.add(i);
        }
        int count = 0;
        while(!queue.isEmpty()){
            int course = queue.poll();
            count++;
            for(int i = 0; i < numCourses; i++){
                if(matrix[course][i] != 0){
                    if(--indegree[i] == 0){
                        queue.add(i);
                    }
                }
            }
        }
        return count == numCourses;
    }
}
    // O(V + E)
    List<Integer>[] matrix = new List[numCourses];
    int[] indegree = new int[numCourses];

    // E part
    for (int[] pre : prerequisites) {
        int preCourse = pre[1];
        int readyCourse = pre[0];
        List<Integer> list = matrix[preCourse];
        if (list == null) {
            list = new LinkedList<>();   
            matrix[preCourse] = list;
        }
        list.add(readyCourse);
        indegree[readyCourse]++;
    }

    Queue<Integer> queue = new LinkedList<>();
    for (int i=0; i<numCourses; i++) {
        if (indegree[i] == 0) queue.offer(i);
    }
    int count = 0;
    // V part
    while (!queue.isEmpty()) {
        int vertex = queue.poll();
        count++;
        List<Integer> adjacent = matrix[vertex];
        if (adjacent == null) continue;
        for (int neighbor : adjacent) {
            indegree[neighbor]--;
            if (indegree[neighbor] == 0)
                queue.offer(neighbor);
        }
    }
    return count == numCourses;

results matching ""

    No results matching ""