Course Schedule
Note:
1) For integer node 0~n, we don't need a hashmap, we can just use array to act like a map;
2) How to initial List[] is very important
3) We need two things. One is the relationship between the node and its dependency (out degree map). The other one is dependend nodes' in-degree map.
public class Solution { /** * @param numCourses a total of n courses * @param prerequisites a list of prerequisite pairs * @return true if can finish all courses or false */ public boolean canFinish(int numCourses, int[][] prerequisites) { // Write your code here //Out Degree relationship List[] edges = new ArrayList[numCourses]; //In Degree map int[] degrees = new int[numCourses]; for (int i = 0; i < numCourses; i++) { edges[i] = new ArrayList<Integer>(); } for (int i = 0; i < prerequisites.length; i++) { degrees[prerequisites[i][0]]++; edges[prerequisites[i][1]].add(prerequisites[i][0]); } Queue<Integer> q = new LinkedList<Integer>(); for (int i = 0; i < numCourses; i++) { if (degrees[i] == 0) { q.offer(i); } } int count = 0; while (!q.isEmpty()) { int course = q.poll(); count++; int n = edges[course].size(); for (int i = 0; i < n; i++) { int advancedCourse = (int)edges[course].get(i); if (degrees[advancedCourse] == 1) { q.offer(advancedCourse); } degrees[advancedCourse]--; } } return (count == numCourses); } }
posted on 2017-06-14 08:38 codingEskimo 阅读(114) 评论(0) 编辑 收藏 举报