2017.9.11
超时超时超时,去死吧
public class Solution {
/**
* @param numCourses a total of n courses
* @param prerequisites a list of prerequisite pairs
* @return the course order
*/
public int[] findOrder(int numCourses, int[][] prerequisites) {
// 首先是要构建图。
ArrayList<HashSet<Integer>> list = new ArrayList<HashSet<Integer>>();
// 先建立头结点。
for(int i = 0; i < numCourses; i++){
list.add(new HashSet<Integer>());
}
//建立所有的后序链表。 // inDegree计算所有的节点的入度。
int []inDegree = new int[numCourses];
for(int []x : prerequisites){
if(!list.get(x[1]).contains(x[0])){
list.get(x[1]).add(x[0]);
inDegree[x[0]] ++;
}
}
//找到一个入度为0的节点,开始遍历。
int []res = new int[numCourses];
for(int j = 0; j < numCourses; j++){
int i = 0;
for(i = 0; i < numCourses;i++){
//在这里找到了一个入度为0的点。
if(inDegree[i] == 0){
res[j] = i;
break;
}
}
if(i == numCourses){
res = new int[0];
return res;
}
inDegree[i] = -1;
Iterator ite = list.get(i).iterator();
while(ite.hasNext()){
inDegree[(int)ite.next()]--;
}
}
return res;
}
}
后来采用了队列的方法,不超时了。呵呵呵呵呵。
public class Solution {
/**
* @param numCourses a total of n courses
* @param prerequisites a list of prerequisite pairs
* @return the course order
*/
public int[] findOrder(int numCourses, int[][] prerequisites) {
// 首先是要构建图。
ArrayList<HashSet<Integer>> list = new ArrayList<HashSet<Integer>>();
// 先建立头结点。
for(int i = 0; i < numCourses; i++){
list.add(new HashSet<Integer>());
}
//建立所有的后序链表。 // inDegree计算所有的节点的入度。
int []inDegree = new int[numCourses];
for(int []x : prerequisites){
if(!list.get(x[1]).contains(x[0])){
list.get(x[1]).add(x[0]);
inDegree[x[0]] ++;
}
}
//找到一个入度为0的节点,开始遍历。
int []res = new int[numCourses];
int count = 0;
LinkedList<Integer> queue = new LinkedList<Integer>();
for(int i = 0; i < numCourses; i++){
if(inDegree[i] == 0){
inDegree[i] = -1;
queue.addLast(i);
}
}
while(!queue.isEmpty()){
res[count++] = queue.peekFirst();
Iterator ite = list.get(queue.pollFirst()).iterator();
while(ite.hasNext()){
int tmp = (int)ite.next();
inDegree[tmp] = inDegree[tmp] - 1;
if(inDegree[tmp] == 0){
inDegree[tmp] = -1;
queue.addLast(tmp);
}
}
}
if(count == numCourses){
return res;
}
else{
return res = new int[0];
}
}
}