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方法 思路: 逆向思维,遍历到边界点(无邻接点相当于叶子),再不断回溯将结点加入到结 ...
随机推荐
- hdu2073-2078
hdu2073 数学 #include<stdio.h> #include<math.h> double len(double x){ )*(x+)); } int main( ...
- javascript的单例模式
单例模式是javascript最基本,最有用的模式之一,它提供了一种将代码组织为一个逻辑单元的手段,这个逻辑单元中的代码通过单一的变量进行访问.我的理解是在这个作用域中,只有通过单一的变量来访问,不存 ...
- YUI JS压缩Ant脚本
<?xml version="1.0" encoding="UTF-8"?><!-- 对指定目录下的所有js进行压缩,放入指定位置 --> ...
- 开发vue全局插件的4种方式
定义全局插件的步骤 定义全局插件 pluginsUtil.js Vue.js 的插件应当有一个公开方法 install .这个方法的第一个参数是 Vue 构造器,第二个参数是一个可选的选项对象: ex ...
- webpack的3个路径配置项: assetsRoot、assetsSubDirectory、assetsPublicPath
在 vue-cli 构建模版的配置文件config.js中有assetsRoot,assetsSubDirectory和assetsPublicPath这三个路径配置项 assetsRoot:构建输出 ...
- 三个php加密解密算法
三个功能强大的php加密解密函数 //加密函数 function lock_url($txt,$key='www.fyunw.com') { $chars = "ABCDEFGHIJKLMN ...
- C# 正则表达式 判断各种字符串(如手机号)
using System; using System.Text.RegularExpressions; namespace MetarCommonSupport { /// <summary&g ...
- golang sizeof 占用空间大小
C语言中,可以使用sizeof()计算变量或类型占用的内存大小.在Go语言中,也提供了类似的功能, 不过只能查看变量占用空间大小.具体使用举例如下. package main import ( &qu ...
- ToString yyyy-MM-dd ,MM 小写的故事。
ToString MM 小写,有可能时间转为 :2013-49-02,放到数据库中查询,就报错.
- neo4j图数据库入门
一.安装及启动 1.安装 Java SDK 1) 地址:http://www.oracle.com/technetwork/java/javase/downloads 2) 下载:jd ...