烦死了!!!怎么那么多错!!
先是如果用matrix存 那么后来每次都要扫一遍特定一个pre的这一行或一列 慢 超时了
然后如果用map《int list》存 就不会访问不存在的边
然后就发现需要判断那个list是否为null 这里要用continue!!!不是break!!!
public class Solution {
public int[] findOrder(int numCourses, int[][] prerequisites) {
HashMap<Integer, List<Integer>> map = new HashMap<Integer, List<Integer>>();
int [] indegree = new int [ numCourses ];
for ( int i = 0; i < prerequisites.length; i ++ ){
int cur = prerequisites[i][0];
int pre = prerequisites[i][1];
indegree[cur] ++;
if ( map.containsKey( pre ) ){
map.get(pre).add(cur);
}
else{
List <Integer> list = new ArrayList<Integer>();
list.add( cur );
map.put ( pre, list );
}
}
int [] res = new int [ numCourses ];
int count = 0;
Queue <Integer> que = new LinkedList<Integer>();
for ( int i = 0; i < indegree.length; i ++ ){
if ( indegree[i] == 0 ){
que.offer ( i );
res[ count ++ ] = i;
}
}
while ( !que.isEmpty() ){
int course = que.poll();
List<Integer> l = map.get(course);
if ( l == null )
continue;
for ( int cour : l ){
indegree[cour] --;
if ( indegree[cour] == 0 ){
que.offer(cour);
res[ count++ ] = cour;
}
}
}
return count == numCourses ? res : new int [0];
}
}