当前位置:网站首页>【日常训练】207. 课程表
【日常训练】207. 课程表
2022-06-25 06:41:00 【Puppet__】
题目
你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。
在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi 。
例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1 。
请你判断是否可能完成所有课程的学习?如果可以,返回 true ;否则,返回 false 。
示例 1:
输入:numCourses = 2, prerequisites = [[1,0]]
输出:true
解释:总共有 2 门课程。学习课程 1 之前,你需要完成课程 0 。这是可能的。
示例 2:
输入:numCourses = 2, prerequisites = [[1,0],[0,1]]
输出:false
解释:总共有 2 门课程。学习课程 1 之前,你需要先完成课程 0 ;并且学习课程 0 之前,你还应先完成课程 1 。这是不可能的。
提示:
1 <= numCourses <= 105
0 <= prerequisites.length <= 5000
prerequisites[i].length == 2
0 <= ai, bi < numCourses
prerequisites[i] 中的所有课程对 互不相同
代码
package dayLeetCode;
import java.util.ArrayList;
import java.util.List;
public class dayleetcode207 {
// dfs
// 将科目和其前置科目连接起来
List<List<Integer>> list = new ArrayList<>();
// 标记数组,0 未搜索, 1 搜索中, 2 搜索完
int visited[];
// 标记是否有环,有环一定为false
boolean flag = true;
public boolean canFinish(int numCourses, int[][] prerequisites) {
// 初始化
visited = new int[numCourses];
for (int i = 0; i < numCourses; i++){
list.add(new ArrayList<Integer>());
}
for (int num[] : prerequisites){
// 学num[0] 之前 要学num[1],所以让num[1]指向num[0]
list.get(num[0]).add(num[1]);
}
for (int i = 0; i < numCourses; i++){
if (visited[i]== 0){
dfs(i);
}
}
return flag;
}
private void dfs(int k) {
visited[k] = 1;
// 要想学习科目k的话,需要学完list.get(k)这些前置科目
for (int t : list.get(k)){
// 如果指向的科目未搜索过就深搜
if (visited[t] == 0){
dfs(t);
//判断下层搜索有没有环
if (!flag){
return;
}
}
// 指向的某一科目在搜索中,产生环
else if (visited[t] == 1){
flag = false;
return;
}
}
// 搜索完,标记为搜索过,即学习完
visited[k] = 2;
}
public static void main(String[] args) {
dayleetcode207 obj = new dayleetcode207();
System.out.println(obj.canFinish(2, new int[][]{
{
1, 0}}));
}
}
边栏推荐
- OpenMP入门
- 图扑软件数字孪生 3D 风电场,智慧风电之海上风电
- Chuantu microelectronics high speed and high performance rs-485/422 transceiver series
- 基于激光雷达的林业调查常用术语及含义锦集
- shell小技巧(一百三十四)简单的键盘输入记录器
- 数据可视化没有重点怎么办?
- LeetCode_哈希表_中等_454.四数相加 II
- El input to add words to the tail
- 力扣78:子集
- Sichuan earth microelectronics 8-channel isolated digital input receiver
猜你喜欢

三年营收连续下滑,天地壹号困在醋饮料里

ELK + filebeat日志解析、日志入库优化 、logstash过滤器配置属性
![[distillation] pointdistiller: structured knowledge distillationwards efficient and compact 3D detection](/img/5c/ad42474a363c33ecc0e01890b65bbf.png)
[distillation] pointdistiller: structured knowledge distillationwards efficient and compact 3D detection

The method of judging whether triode can amplify AC signal

Intel announced five new technological developments, including quantum computing, neural pseudo computing, machine programming, integrated optoelectronics, and secure computing

Shell tips (134) simple keyboard input recorder

GUI pull-down menu of unity3d evil door implementation dropdown design has no duplicate items

CPDA|数据分析师成长之路如何起步?
![Different paths ii[dynamic planning improvement for DFS]](/img/bb/1e1cee22b9de954de242d299a1a0eb.png)
Different paths ii[dynamic planning improvement for DFS]

What if there is no point in data visualization?
随机推荐
Four software 2021-10-14 suitable for beginners to draw PCB
OAuth 2.0一键登录那些事
ELK + filebeat日志解析、日志入库优化 、logstash过滤器配置属性
Usememo simulation usecallback
Modular programming of digital light intensity sensor module gy-30 (main chip bh1750fvi) controlled by single chip microcomputer (under continuous updating)
一次弄清楚 Handler 可能导致的内存泄漏和解决办法
力扣76题,最小覆盖字串
AttributeError: ‘Upsample‘ object has no attribute ‘recompute_scale_factor‘
判断用户是否是第一次进入某个页面
Chuantu microelectronics breaks through the high-end isolator analog chip market with ca-is3062w
栅格地图(occupancy grid map)构建
Intel announced five new technological developments, including quantum computing, neural pseudo computing, machine programming, integrated optoelectronics, and secure computing
函数模板_类模板
1742. 盒子中小球的最大数量
Can I open a stock account with a compass? Is it safe?
50. Pow(x, n)-快速幂
Access to foreign lead domain name mailbox
VectorDraw Developer Framework 10.10
Redis learning notes
Ns32f103c8t6 can perfectly replace stm32f103c8t6