【力扣】207.课程表(图)

news2024/11/14 15:16:26

依旧还是有关于图的题目,这次不一样的点在于题目并没有明确的给出他是图的题目的形式,而是说让你根据其题目意思来进行操作。

首先,就是搞清楚题目的意思。假设你想学习A课程,那就是必须先学习B课程,但是这里给出的例子只有两个,我们要知道的是不一定只有B课程,可能还有其他的比如说C、D课程,要把这些都学完了你猜可以学A,同时A也可能成为某种课程的充分条件,那么这里我们就可以知道这就是图类题目的形式。

然后需要注意的是,题目给出的numCourse就是所有课程的种树,那我们就可以通过设置一个计时器,来记录有学某种课程的总数量,最后比较,若相等则返回true,反之返回false。

具体来实现的话,步骤如下:

  1. 需要一个一维数组来记录每个课程的入度,代码中是 inDegree
  2. 还需要一个map集合来记录各个结点之间的关系
  3. 首先需要遍历,用以记录每个课程的入度,以及他们之间的关系
  4. 然后将所有入度为0的课程存放入队列中
  5. 接着我们开始学了,学习该课程之后便需要更新其入度的数量,所以需要这个操作

最后完整的代码如下,我也是参考力扣上面其他的大神的,一起加油吧!

class Solution {
public:
    bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
        vector<int> inDegree(numCourses); // 记录每个结点的入度
        unordered_map<int, vector<int>> map; // 记录每个结点之间的关系
        // 遍历记录每个结点的入度并建立关系
        for( int i = 0; i < prerequisites.size(); i++){
            inDegree[prerequisites[i][0]]++;
            map[prerequisites[i][1]].push_back(prerequisites[i][0]);
        }
        // 定义队列+bfs
        queue<int> que;
        // 遍历入度为0的课
        for(int i = 0; i < numCourses; i++){
            if(inDegree[i] == 0) que.push(i); // 课程是用数字来表示的,所以说不影响
        }
        int count = 0;
        while (que.size()){
            int selected=que.front();
            que.pop();
            count++;
            //更新所有关联结点的入度
            for (int i = 0; i < map[selected].size(); i++){
                if(inDegree[map[selected][i]] > 0){
                    inDegree[map[selected][i]]--;
                    if(inDegree[map[selected][i]] == 0){
                        que.push(map[selected][i]); // 将入度为0的课程放到队列中
                    }
                }
            }
        }
        if(count==numCourses)
            return true;
        else
            return false;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1481621.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

消息队列+更新DB极易引发的DB并发修改bug

背景 我们在生产系统中和其他系统进行交互时一般都会通过消息队列来解耦生产者和消费者&#xff0c;然后通过每个使用方消费消息队列的消息的方式来完成消息的消费&#xff0c;并且一般来说我们消费消息后极有可能会操作DB&#xff0c;不过这种方式如果处理不够仔细&#xff0…

Linux——进程控制(一)进程的创建与退出

目录 一、进程创建 1.写时拷贝 2.创建多个进程 二、进程终止 1.main函数的返回值 2.bash中的$? 3.自定义退出码 4.C语言的错误码 5.错误码与退出码的区别 6.代码异常终止 7.exit函数 8.总结 一、进程创建 在之前&#xff0c;我们学过linux中的非常重要的函数——…

全网爆火的 MBTI 测试,是隐藏的割韭菜工具?

小伙伴们&#xff0c;谁能想到&#xff0c;作为一名冲浪老手&#xff0c;果子在网上又被骗了。 事情是这样的&#xff0c;前几天&#xff0c;我刷微博&#xff0c;看到一个推荐&#xff0c;大概如下图&#xff0c;是一个 MBTI 人格测试。 MBTI 测试&#xff0c;果子早就做过了…

【前端素材】推荐优质在线电影院商城电商网页Hyper平台模板(附源码)

一、需求分析 1、系统定义 在线电影商城是指一个通过互联网提供电影服务的平台&#xff0c;用户可以在该平台上浏览电影资源、租借或购买电影&#xff0c;以及观看在线影片。 2、功能需求 在线电影商城是指一个通过互联网提供电影服务的平台&#xff0c;用户可以在该平台上…

Windows Docker 部署 Redis

部署 Redis 打开 Docker Desktop&#xff0c;切换到 Linux 内核。然后在 PowerShell 执行下面命令&#xff0c;即可启动一个 redis 服务。这里安装的是 7.2.4 版本&#xff0c;如果需要安装其他或者最新版本&#xff0c;可以到 Docker Hub 中进行查找。 docker run -d --nam…

2.25_模式识别大作业的三种方法

filename sys.argv[1] df pd.read_csv(filename,index_col["ID"]) ax df.plot() ax.set_xlabel("Data_ID") ax.set_ylabel("load_value") plt.show() 这段代码是用来读取一个CSV文件&#xff0c;并将文件中的数据绘制成一个简单的折线图。 在…

lv20 QT 常用控件 2

1 QT GUI 类继承简介 布局管理器 输出控件 输入控件 按钮 容器 2 按钮示例 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QCheckBox> #include <QLineEdit> #include <QPushButton>class Widget : public QWidget {Q_OBJECTpublic…

【C语言】常见的动态内存管理错误

前言 上一篇介绍了C语言中 动态内存管理函数&#xff0c;本片讲解的是 在我们使用动态内存管理时 常见的错误&#xff0c;一起来看看吧~ 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 1.对NULL指针的解引⽤操作 错…

如何高效管理项目:从规划到执行

导语&#xff1a;项目管理是一项复杂而重要的工作&#xff0c;涉及多个方面&#xff0c;包括规划、执行、监控和收尾。本文将介绍如何高效管理项目&#xff0c;从规划到执行&#xff0c;帮助您成功完成项目目标。 一、项目规划 项目规划是项目成功的关键。在规划阶段&#xff0…

图片的处理库Thumbnailator

摘要&#xff1a;最近遇到图片处理的问题&#xff0c;借助了Thumbnailator库&#xff0c;记录下使用步骤如下…… 图片处理&#xff0c;JDK中也提供了对应的工具类&#xff0c;不过处理较麻烦&#xff0c;Thumbnailator 是Google一个 开源Java 图像处理库&#xff0c;用于简化 …

力扣:35. 搜索插入位置

力扣&#xff1a;35. 搜索插入位置 描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,…

MySQL5.7.44版本压缩包在Win11系统快速安装

一.背景 主要还是为了公司的带徒弟任务。我自己也喜欢MySQL的绿色版本。 1.软件版本说明 MySQL版本&#xff1a;5.7.44 压缩包版本&#xff0c;相当于绿色版。当然&#xff0c;你也可以使用window系统的Installer版本去安装。 操作系统&#xff1a;Win11家庭版 二.MySQL软…

MYSQL--JDBC*

一.介绍: 1.JDBC是一种用于执行SQL于语句的JAVA API,JDBC是一种使用JAVA访问数据库的执行规范标准,能够为不同的数据库提供统一的访问!由一组使用JAVA语言编写的接口以及类组成的 2.JDBC核心的类以及相关的接口主要有: DriverManager 注册驱动 Connection 使用…

期货开户坚持固定的盈利模式

1、超级操盘手比的往往不是技术&#xff0c;而是素质。成功的交易者有着一种与众不同的品质&#xff0c;他们拥有正确的思维方式&#xff0c;严谨的交易态度&#xff0c;强烈的自信心、果敢&#xff0c;和面对失败永不言败的精神&#xff0c;即使在系统最困难的时候&#xff0c…

C++ //练习 10.14 编写一个lambda,接受两个int,返回它们的和。

C Primer&#xff08;第5版&#xff09; 练习 10.14 练习 10.14 编写一个lambda&#xff0c;接受两个int&#xff0c;返回它们的和。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /***************************************…

5G 网络建设【华为OD机试-JAVAPythonC++JS】

题目描述 现需要在某城市进行5G网络建设&#xff0c;已经选取N个地点设置5G基站&#xff0c;编号固定为1到N&#xff0c;接下来需要各个基站之间使用光纤进行连接以确保基站能互联互通&#xff0c;不同基站之间架设光纤的成本各不相同&#xff0c;且有些节点之间已经存在光纤相…

使用MyBatisPlus实现向数据库中存储List类型的数据

使用MyBatisPlus实现向数据库中存储List类型的数据 问题描述 建表时&#xff0c;表中的这五个字段为json类型 但是在入库的时候既不能写入数据&#xff0c;也不能查询出数据。 解决方案&#xff1a; 1.首先明确&#xff0c;数据存入的时候是经过了数据类型转化&#xff0c…

Nacos配置

目录 启动nacos 项目步骤 Nacos服务分级存储模型​编辑 服务跨域集群调用问题 NacosRule负载均衡 服务实例的权重设置 环境隔离-namespace Nacos环境隔离 Nacos和Eureak对比 临时实例和非临时实例 Ncaos与Eureka的共同点 Nacos与Eureka的区别 Nacos配置管理 统一配…

Linux 系统安装/卸载 Nginx教程

优质博文&#xff1a;IT-BLOG-CN 一、安装Nginx 【1】首先通过Nginx官网确定需要安装的版本&#xff0c;如果Linux联网则直接在Linux服务上使用wget命令将Nginx安装包下载到/usr/local/目录下&#xff1a; [rootxxx local]# wget -c http://nginx.org/download/nginx-1.22.1.…

electron+vue3全家桶+vite项目搭建【28】封装窗口工具类【2】窗口组,维护窗口关系

文章目录 引入实现效果思路主进程模块渲染进程模块测试效果 引入 demo项目地址 窗口工具类系列文章&#xff1a; 封装窗口工具类【1】雏形 我们思考一下窗口间的关系&#xff0c;窗口创建和销毁的一些动作&#xff0c;例如父子窗口&#xff0c;窗口组合等等&#xff0c;还有…