文章目录

  • 题目大意
  • 输入
  • 思路
  • 代码
  • 总结

题目大意

给出n个课程,以及某些课程的预置课程,某课程的预置课程表示必须先参加预置课程后才能再参加该课程。判断是否可以完成所有的课程。

输入

n表示课程数,列表表示课程的预置课程:numCourses = 2, prerequisites = [[1,0]]

思路

可以抽象为有向图是否有环的问题,而该问题有两种解决方法:

  1. 深度优先搜索判断

    搜索过程若遇到了之前访问过的节点则表示有环

  2. 利用每个节点的入度判断

    将所有入度为0的节点加入队列,对队列每个节点,删除从其出发的所有边,更新节点的入度,将新的入度为0的节点加入队列,直到发现 节点入度小于0 或者循环结束后 依旧存在入度不为0的节点

代码

第二种方法的代码。

typedef vector<vector<int>> vvi;
class Solution {public:bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {if (numCourses <= 1) return true;vector<int> indegrees(numCourses, 0);vector<vector<int>> graph(numCourses);for (auto tmpvec: prerequisites){graph[tmpvec[1]].push_back(tmpvec[0]);indegrees[tmpvec[0]]++;}queue<int> q;for (int i = 0; i < numCourses; i++) if (indegrees[i] == 0) q.push(i);if (q.empty() && numCourses > 1) return false;while(!q.empty()) {int u = q.front();q.pop();for (int child: graph[u]) {indegrees[child]--;if (indegrees[child] == 0) q.push(child);else if (indegrees[child] < 0) return false;}}for (int i = 0; i < numCourses; i++)if (indegrees[i] != 0)return false;return true;}
};

总结

经典题目。

LeetCode Daily challenge - Course Schedule相关推荐

  1. LeetCode Daily challenge - K Closest Points to Origin

    文章目录 题目大意 思路 代码 总结 题目大意 找前K小元素,只不过元素是二维的坐标 思路 很容易想到排序后取前K个,虽然可以但是速度不够快.实际上类似于找第K大(小),可以用划分的方法找,每次随机划 ...

  2. Leetcode May Challenge - 05/07: Cousins in Binary Tree(Python)

    题目描述 In a binary tree, the root node is at depth 0, and children of each depth k node are at depth k ...

  3. leetcode 446. Arithmetic Slices II - Subsequence | 446. 等差数列划分 II - 子序列(动态规划)

    题目 https://leetcode.com/problems/arithmetic-slices-ii-subsequence/ 题解 找等差子数列,详见注释. 一个月前做过,没通过,今天 dai ...

  4. 消除SQL Server中重要维护任务的风险

    As database professionals, we are often in very close proximity to important processes, data, and ap ...

  5. taoqick 搜索自己CSDN博客

    L1 L2正则化和优化器的weight_decay参数 kaiming初始化的推导 Pytorch动态计算图 Pytorch自动微分机制 PyTorch中在反向传播前为什么要手动将梯度清零? 通俗讲解 ...

  6. 插图 引用 同一行两个插图_为什么插图是产品的重要组成部分

    插图 引用 同一行两个插图 "Hi, my name is Ludmila and I'm a UX/UI designer" "嗨,我叫Ludmila,我是UX / U ...

  7. 【英语】Invest in Yourself

    See whatever you're doing-. However you spend your time.. That tells you who you are, so think about ...

  8. 看博客学学Android(二十一)

    原文地址: Day 19: Daily Challenge and Missions Daily challenge is to collect 5 letter which fly like pow ...

  9. Elasticsearch - 压测方案之 esrally 简介

    文章目录 为什么要压测? 如何进行压测? 入门 简介 快速入门 相关术语 track car race Tournament Pipeline 压测流程 压测结果分析 实战 问题一 问题二 问题三 进 ...

最新文章

  1. 【平行驾驶】王飞跃 | 人工智能与智能汽车:在CPSS中驶向第三轴心时代
  2. 基于uPC1677C射频功率放大
  3. cp分解实现_如何用贝叶斯高斯张量分解修复缺失数据?(Jupyter notebook - Python)
  4. MySQL8.0.16主从同步
  5. linux修改rm指令执行(数据安全)
  6. 需求分析与系统设计读书笔记之五
  7. speedoffice(PPT)插入的表格怎么合并单元格呢
  8. 2019 ngChina 开发者大会 - 工作坊系列:RxJS,Angular,和全栈开发
  9. 收藏:学做美食--欢乐年夜饭之神七年糕火焰虾
  10. debian系统服务器读不出来,Debian10局域网服务器使用踩坑笔记
  11. Rimworld Mod制作教程2 创建数据定义
  12. 部分主元法求解线性方程组
  13. iOS 数据持久化方式 - 归档 反归档
  14. 单调递增最长子序列 拦截导弹(nyoj 17 nyoj 79)
  15. crm登录功能实现记住我
  16. Social Justice Awards秋季赛正式启动
  17. 发送邮件常见出错代码
  18. 批量将EXCEL转为PDF
  19. 如何下载、配置C++
  20. 剖根问底:Java 不能实现真正泛型的原因是什么?

热门文章

  1. 【哈工大SCIR笔记】机器阅读理解简述
  2. Macbook Pro(M1芯片)腾讯会议无法使用共享屏幕功能
  3. 乐高大颗粒作品19:端午节做一个粽子
  4. 实战 —— 生存唯一随机数
  5. 电脑配置之CPU性能参数[一]
  6. [LeetCode javaScript] 881. 救生艇
  7. 调用科大讯飞语音合成离线SDK的基础上调用pyqt5模块编写gui界面
  8. NLP算法之一(朴素贝叶斯理论部分)
  9. 用python画篮球场_如何使用 Python 创建一个 NBA 得分图?
  10. 7. 【containerd】连接远程containerd问题