当前位置: 首页 > news >正文

【力扣每日一题】2023.9.12 课程表Ⅳ

目录

题目:

示例:

分析:

代码:


题目:

示例:

分析:

今天是课程表系列题目的最后一题,因为我在题库里找不到课程表5了,所以今天的每日一题就是最后一个课程表了。

题目照例是给我们一堆课程的先修关系,然后问我们某课程是否是另一个课程的先修课程,或者是先修课程的先修课程。

如下图,B,C,D都是A的先修课程。

把问题换个问法,也就是在有向图中,一个节点能否走到另一个节点。

那我们只需要递归的去寻找目标课程的先修课程,直到找到对应的先修课程或者是把所有先修课程都找遍了也没找到。

DFS和BFS都可以,我个人喜欢DFS,所以下面代码是DFS的。

代码:

class Solution {
public:unordered_map<int,vector<int>>m;bool find(int n,int cur,int target,unordered_set<int>& s){if(s.count(cur)) return false;  //防止重复递归同一个课程s.insert(cur);for(int& i:m[cur]){         //遍历当前课程的先修课程if(i==target) return true;  //如果等于了目标课程那么返回tureif(find(n,i,target,s)) return true; //再去寻找先修课程的先修课程}return false;}vector<bool> checkIfPrerequisite(int numCourses, vector<vector<int>>& prerequisites, vector<vector<int>>& queries) {for(auto& p:prerequisites){ //构建有向图if(m.find(p[0])==m.end()) m[p[0]]=vector<int>(0);m[p[0]].push_back(p[1]);}vector<bool>res;for(auto& q:queries){   //遍历问题unordered_set<int>s;if(find(numCourses,q[0],q[1],s)) res.push_back(true);else res.push_back(false);}return res;}
};

http://www.lryc.cn/news/164660.html

相关文章:

  • CentOS 安装HTTP代理服务器 Tinyproxy
  • PHPWord 模板输出checkbox复选框和checked已勾选状态,以及 模板替换时数据如何分行
  • vue学习之 v-for key
  • ARM接口编程—IIC总线(exynos 4412平台)
  • ReactNative进阶(二十一)开源插件 react-native-device-info 获取设备信息
  • MySql学习笔记05——DML
  • halcon对图片进行处理基础
  • element-ui在vue中如何实现校验两个复选框至少选择一个!
  • DeepinV20/Ubuntu安装postgresql方法
  • 汽车ECU软件升级方案介绍
  • 首家!亚信科技AntDB数据库完成中国信通院数据库迁移工具专项测试
  • 为什么好多人想辞职去旅行?
  • vim的使用介绍以及命令大全
  • JavaScript高级技巧:深入探索JavaScript语言的高级特性和用法
  • 虹科方案|HK-Edgility利用边缘计算和VNF降本增效
  • SpringBoot项目--电脑商城【新增收货地址】
  • [HNCTF 2022 Week1]——Web方向 详细Writeup
  • 3dmax vray如何创建真实的灯光?3dmax vray 室内照明教程
  • 如何在本地使用Docker搭建和运行Kubernetes集群
  • 每天几道Java面试题(第二天)
  • Java | 线程的生命周期和安全
  • Bootstrap的一些主要作用
  • 网络编程套接字 | UDP套接字
  • 网络层IP协议
  • C++ Day4
  • 2024字节跳动校招面试真题汇总及其解答(二)
  • SpringBoot集成websocket(4)|(使用okhttp3实现websocket)
  • 【MySQL】JDBC编程
  • 数据结构——二叉树线索化遍历(前中后序遍历)
  • GO语言网络编程(并发编程)Channel