public class Solution {

    //test case [1,0]
public int[] findOrder(int numCourses, int[][] prerequisites) {
int[] map = new int[numCourses];
int n = prerequisites.length;
int[] res = new int[numCourses]; for(int i=; i<n; i++) {
map[ prerequisites[i][] ] ++;
} Queue<Integer> que = new LinkedList<Integer>();
int index = numCourses-;
for(int i=; i<numCourses; i++) {
if(map[i] == ) {
que.add(i);
res[index--] = i;
}
} while(!que.isEmpty() ){
int k = que.remove();
for(int i=; i<n; i++) {
int l = prerequisites[i][];
if(k==prerequisites[i][]) {
map[l]--;
if(map[l] == ) {
que.add(l);
res[index--] = l;
}
}
}
}
if(index!=-) return new int[];
else return res;
}
}

补充一个python的实现,使用深度优先遍历,进行拓扑排序:

 class Solution:
def dfs(self,visited,memo,dic,i,postCourse):
if visited[i]:
return True
if memo[i] == :
return False
elif memo[i] == :
return True
for cs in dic[i]:
visited[i] = True
bl = self.dfs(visited,memo,dic,cs,postCourse)
visited[i] = False
if bl:
memo[i] =
return True
memo[i] =
postCourse.append(i)
return False
def findOrder(self, numCourses: int, prerequisites: 'List[List[int]]') -> 'List[int]':
dic = {}
n = len(prerequisites)
for i in range(numCourses):
dic[i] = []
for i in range(n):
cs = prerequisites[i][]#当前课程
pre = prerequisites[i][]#前置课程
dic[cs].append(pre)
visited = [False for _ in range(numCourses)]
memo = [- for _ in range(numCourses)]
postCourse = []
for i in range(numCourses):
if self.dfs(visited,memo,dic,i,postCourse):
return []
return postCourse

leetcode210的更多相关文章

  1. [Swift]LeetCode210. 课程表 II | Course Schedule II

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

  2. leetcode210.拓扑排序

    拓扑排序能否成功,其实就是看有没有环 有环:说明环内结点互为前置,永远也不可能完成 无环:是线性的,可以完成 DFS方法 思路: 逆向思维,遍历到边界点(无邻接点相当于叶子),再不断回溯将结点加入到结 ...

随机推荐

  1. java1.8操作日期

    java1.8获取年份: int year = Calendar.getInstance().get(Calendar.YEAR); StringBuilder code = new StringBu ...

  2. Openssl将crt证书和key私钥合成pfx证书

    下载OpenSSL地址:http://slproweb.com/products/Win32OpenSSL.html 下载安装openssl 选择对应OpenSSL版本进行下载下载. 运行安装程序Wi ...

  3. Hadoop 和 Spark 的关系

    Hadoop实质上是一个分布式数据基础设施: 它将巨大的数据集分派到一个由普通计算机组成的集群中的多个节点进行存储,意味着您不需要购买和维护昂贵的服务器硬件. 同时,Hadoop还会索引和跟踪这些数据 ...

  4. Cropperjs 插件知识点

    cropper.js 通过 canvas 实现图片裁剪,最后再通过 canvas 获取裁剪区域的图片base64串. 1. Container 容器 2. canvas 图片 3. crop 裁剪框

  5. Queque 方法对比和分类

    添加类:方法 public boolean add(E e)      增加一个元索                     如果队列已满,则抛出一个IIIegaISlabEepeplian异常 bo ...

  6. ML(3.1): NavieBayes R_e1071

    朴素贝叶斯方法是一种使用先验概率去计算后验概率的方法, 具体见ML(3): 贝叶斯方法 R包 ① e1071::e1071 ② klaR::klaR 参考资料:https://en.wikibooks ...

  7. Windows Phone 的这几年

    Windows Phone 从2010年10月发布,到如今已经有3年多了.从那时坚持到现在的用户和开发者一定感慨很多吧. 一直关注着这个让人既爱又恨的平台的发展,笔者不仅是使用者,也同时是开发者,这里 ...

  8. samba 挂载windows共享文件夹

    先转载一片文章     centOS下yum安装配置samba 地址 http://blog.csdn.net/linglongwunv/article/details/5212875 遇到问题1 # ...

  9. [转]SQL SERVER 的排序规则

    如何更改SQL SERVER 2000的排序规则 -- 增加复合主键语句 Alter Table tableName Add primary key (field1,field2) Alter dat ...

  10. MySQL 报错记录

    #--------------------------------------------------------------------------------------------------- ...