LeetCode:课程表II【210】
LeetCode:课程表II【210】
题目描述
现在你总共有 n 门课需要选,记为 0 到 n-1。
在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]
给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。
可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。
示例 1:
输入: 2, [[1,0]]
输出:[0,1]
解释: 总共有 2 门课程。要学习课程 1,你需要先完成课程 0。因此,正确的课程顺序为[0,1] 。
示例 2:
输入: 4, [[1,0],[2,0],[3,1],[3,2]]
输出:[0,1,2,3] or [0,2,1,3]
解释: 总共有 4 门课程。要学习课程 3,你应该先完成课程 1 和课程 2。并且课程 1 和课程 2 都应该排在课程 0 之后。
因此,一个正确的课程顺序是[0,1,2,3]。另一个正确的排序是[0,2,1,3]。
说明:
- 输入的先决条件是由边缘列表表示的图形,而不是邻接矩阵。详情请参见图的表示法。
- 你可以假定输入的先决条件中没有重复的边。
题目分析
这道题是课程表【207】的进阶,基础的拓扑排序内容请点击超链接。
我们在上道题的基础上,把所有的访问过的点依次加入结果集中即可。
Java题解
class Solution {
public int[] findOrder(int numCourses, int[][] prerequisites) {
ArrayList<ArrayList<Integer>> graph = new ArrayList<>();
for(int i = 0;i<numCourses;i++)
graph.add(new ArrayList<Integer>());
for(int i=0;i<prerequisites.length;i++)
{
int course = prerequisites[i][0];
int pcourse = prerequisites[i][1];
graph.get(course).add(pcourse);
}
int[] visited = new int[numCourses];
List<Integer> ans = new ArrayList<Integer>();
for(int i=0;i<numCourses;i++)
if(DFS(i,graph,visited,ans))
return new int[0];
return ans.stream().mapToInt(i->i).toArray();
}
public boolean DFS(int curr,ArrayList<ArrayList<Integer>> graph,int[] visited,List<Integer> ans)
{
//递归结束条件
if(visited[curr]==1)//这个节点已经被访问
return true;
if(visited[curr]==2)//这个节点没有被访问
return false;
//业务逻辑处理
visited[curr]=1;//表示正在访问
for(int id:graph.get(curr))
if(DFS(id,graph,visited,ans))
return true;
ans.add(curr);
visited[curr]=2;//表示已经访问
return false;
}
}
LeetCode:课程表II【210】的更多相关文章
- Java实现 LeetCode 210 课程表 II(二)
210. 课程表 II 现在你总共有 n 门课需要选,记为 0 到 n-1. 在选修某些课程之前需要一些先修课程. 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0, ...
- leetcode Permutations II 无重全排列
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4051169.html 题目链接:leetcode Permutations II 无重全排 ...
- [LeetCode] 210. 课程表 II
题目链接:https://leetcode-cn.com/problems/course-schedule-ii/ 题目描述: 现在你总共有 n 门课需要选,记为 0 到 n-1. 在选修某些课程之前 ...
- [leetcode]210. Course Schedule II课程表II
There are a total of n courses you have to take, labeled from 0 to n-1. Some courses may have prereq ...
- [LeetCode] Course Schedule I (207) & II (210) 解题思路
207. Course Schedule There are a total of n courses you have to take, labeled from 0 to n - 1. Some ...
- 【LeetCode】课程表 II
[问题]现在你总共有 n 门课需要选,记为 0 到 n-1.在选修某些课程之前需要一些先修课程.例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及 ...
- 210. 课程表 II
Q: 现在你总共有 n 门课需要选,记为 0 到 n-1. 在选修某些课程之前需要一些先修课程. 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1] 给定课程总量 ...
- [LeetCode] Permutations II 全排列之二
Given a collection of numbers that might contain duplicates, return all possible unique permutations ...
- LeetCode Permutaions II
LeetCode解题之Permutaions II 原题 输出一个有反复数字的数组的全排列. 注意点: 反复数字的可能导致反复的排列 样例: 输入: nums = [1, 2, 1] 输出: [[1, ...
随机推荐
- 集群下使用redis统一session处理
pom依赖(快照版): <dependency> <groupId>org.springframework.session</groupId> <artifa ...
- python管理工具easy_install与pip
刚开始同步系统的接触python和linux,在昊妹妹的指引下学习了使用python管理工具,希望能够通过不断熟练来学习 1.记录之前先复习以下linux下常用目录 ./ 表示当前目录 ~/ 表示h ...
- Android 启动界面的实现(转载)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...
- tomcat修改默认端口
1.webserver: tomcat2.version: Apache Tomcat/7.0.293.operation: 修改默认端口 3.1 修改tomcat目录下的/conf/server ...
- plsql参数
PL/SQL中对out,in out参数使用的? 默认形参会复制一份实参的副本,然后在内部传递,修改等,发生异常,不会赋值给实参,控制权交还调用环境,而实参值不变,还是调用前的值.而使用了NOCOPY ...
- springmvc学习笔记(19)-RESTful支持
springmvc学习笔记(19)-RESTful支持 标签: springmvc springmvc学习笔记19-RESTful支持 概念 REST的样例 controller REST方法的前端控 ...
- 1.2_php验证码
使用php生成动态的验证码图片 <!DOCTYPE html> <html> <head> <meta charset="utf-8"&g ...
- HDU3533(Escape)
不愧是kuangbin的搜索进阶,这题没灵感写起来好心酸 思路是预处理所有炮台射出的子弹,以此构造一个三维图(其中一维是时间) 预处理过程就相当于在图中增加了很多不可到达的墙,然后就是一个简单的bfs ...
- java注解类定时器
package com.jianwu.task; import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;imp ...
- 前端模板<script type="text/template" id="tmpl">
前端模板, 比连接字符串好用多了, 还可以使用循环\判断等语句, 减少工作量 <script type="text/template" id="member-tmp ...