leetcode210
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的更多相关文章
- [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 ...
- leetcode210.拓扑排序
拓扑排序能否成功,其实就是看有没有环 有环:说明环内结点互为前置,永远也不可能完成 无环:是线性的,可以完成 DFS方法 思路: 逆向思维,遍历到边界点(无邻接点相当于叶子),再不断回溯将结点加入到结 ...
随机推荐
- LG2375 [NOI2014]动物园
题意 给定一个长为\(L\)的字符串(\(L \leq 1e6\)) 求一个\(num\)数组,\(num[i]\)表示长度为\(i\)的前缀中字符串\(S'\)的数量,其中\(S'\)既是该前缀的前 ...
- Eclipse+Spring学习(一)环境搭建(转)
最近由于投了一家公司实习,他要java工程师,而我大学3年的精力都花到了ASP.NET和前端上面,到找工作的时候才发现大公司不要.NET的,所以马上转型java...由于网上的高手都不屑于写这类文章, ...
- dockercompose up build fail
docker https://auth.docker.io/token dial tcp lookup auth.docker.io i/o timeo Error response from dae ...
- 使用 phpStudy + VSCODE 进行 PHP 断点调试
使用 phpStudy + VSCODE 进行 PHP 断点调试 自己摸索过程有点曲折,但还是配置成功了,现分享如下. 原料 phpStudy 2018 VSCODE 配置过程 安装 phpStudy ...
- k最邻近算法——加权kNN
加权kNN 上篇文章中提到为每个点的距离增加一个权重,使得距离近的点可以得到更大的权重,在此描述如何加权. 反函数 该方法最简单的形式是返回距离的倒数,比如距离d,权重1/d.有时候,完全一样或非常接 ...
- Django模板语言(常用语法规则)
Django模板语言 The Django template language 模板中常用的语法规则 {最新版本的Django语法可能有改变,不支持的操作可能支持了.[HTML教程 - 基本元素/标签 ...
- EF Code First Migrations数据库迁移 (转帖)
1.EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework. 在程序包管理器控制台中执行以下语句,安装EntityFramewo ...
- mysqldump的single-transaction
先看一下--lock-tables和--lock-all-tables --lock-all-tables 一次性锁定所有数据库的所有表,在整个dump期间一直获取global read lock: ...
- 如何在ASP.NET页面中使用异步任务(PageAsyncTask)
在页面加载期间,可能有些操作是要比较耗用时间的(例如调用外部资源,要长时间等待其返回),正常情况下,这个操作将一直占用线程.而大家知道,ASP.NET在服务端线程池中的线程数是有限的,如果一直占用的话 ...
- 锁定“嵌入式AI”应用 中科创达启动第二轮成长
Thundersoft|中科创达软件股份有限公司 http://www.thundersoft.com/index.php 原文:http://tech.hexun.com/2017-08-29/1 ...