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方法 思路: 逆向思维,遍历到边界点(无邻接点相当于叶子),再不断回溯将结点加入到结 ...
随机推荐
- java BeanUtils.copyProperties
github搜索关键词: copyPropertiesIgnore https://github.com/longyi97/GA/blob/997e9c3a467268041c186234d91c4e ...
- oracle 获取星期日期
oracle 中的计算如下: 计算本星期的起始结束日期--得到星期一的日期select trunc(sysdate,''DD'')-to_char(sysdate,''D'')+2 from dual ...
- node express 返回json object
web 开发的过程中我们经常需要返回对象的json 格式,使用node express 是比较简单的, 1.node express 基础网站的创建 比较简单,以前的文章有 2.编写对象并导出对象 / ...
- log4net保存到数据库系列五、新增数据库字段
园子里面有很多关于log4net保存到数据库的帖子,但是要动手操作还是比较不易,从头开始学习log4net数据库日志一.WebConfig中配置log4net 一.WebConfig中配置log4ne ...
- 整理开源协议问题 GPL APACHE
整理开源协议问题 GPL APACHE APACHE 和 GPL 互相不兼容. APACHE 不可以使用 GPL 的代码. 但是 APACHE 可以调用 GPL 组件的接口. 比如 Linux 和 A ...
- 洛谷4030(Codeplus11月月赛)可做题1
题目:https://www.luogu.org/problemnew/show/P4030 原来一个方阵巧妙的充要条件是该方阵的每个2*2子方阵都是巧妙的!!! 可以把每一行选的列视为一个排列,需要 ...
- Tomcat 去除项目名称
再tomcat的conf下server.xml 里, 再<host>...</host>的标签之间添加 <Context path="" docBa ...
- BaseDao的编写:实现 增,删,改,查,分页这些公共方法的编写
1.BaseDao接口 package com.learning.crm.base; import java.io.Serializable; import java.util.List; publi ...
- 开发框架-移动开发平台: mPaaS
ylbtech-开发框架-移动开发平台: mPaaS 移动开发平台 mPaaSmPaaS(Mobile PaaS)为 App 开发.测试.运营及运维提供云到端的一站式解决方案,能有效降低技术门槛.减少 ...
- 杂项:Unity3D
ylbtech-杂项:Unity3D Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型互动内容的多平台的综合型游戏开发工具 ...