【力扣100】207.课程表

添加链接描述

class Solution:
    def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:
        # 思路是计算每一个课的入度,然后使用队列进行入度为0的元素的进出
        # 数组:下标是课程号,array[下标]是这个课程的入度
        # 哈希表:key是课程号,value是以这个课程号为先导课的课程列表!注意是列表!这里需要使用defaultdict
        mylist=[0]*numCourses
        mydict=collections.defaultdict(list)
        for i in prerequisites:
            mylist[i[0]]+=1
            mydict[i[1]].append(i[0])

        # 现在初始化队列
        myque=collections.deque()
        for i in range(len(mylist)):
            if mylist[i]==0:
                myque.append(i)
        
        while myque:
            cur=myque.popleft()
            cur_list=mydict[cur]
            # numCourses-=1
            if cur_list:
                for follcourse in cur_list:
                    mylist[follcourse]-=1
                    if mylist[follcourse]==0:
                        myque.append(follcourse)
        
        # 验证入度数组是不是都为0,如果不是0,则返回false
        for i in mylist:
            if i !=0:
                return False
        return True
  

思路:

  1. 题目分析:把先导课程和后续课程画图:
    在这里插入图片描述
  2. 看出来,后续课程都是入度不为0的节点
  3. 然后使用一个数组,记录每一门课的入度
  4. 使用一个字典defaultdict来保存一个课程的后续课程列表
  5. 初始化数组和while循环,使用bfs队列维护
  6. 当前出队列的元素需要把它的后续课程列表拿出来,并把里面每一个课程的入度减1,如果课程入度为0,就可以加入队列
  7. 最后判断数组中的元素入度是不是都为0,返回

collections.defaultdict的优势

它允许你在创建时指定一个默认值的类型,当你访问一个不存在的键时,它会使用这个默认值类型创建一个新的值,并将其返回。这意味着你不会因为访问不存在的键而引发 KeyError。

对于本题的 mydict=collections.defaultdict(list)
  • 这是使用普通dict,需要初始化:
# 创建一个普通的字典,值的类型是数组
dict_with_arrays = {}

# 添加元素到字典中
dict_with_arrays['key1'] = []  # 这里使用空列表作为值的初始类型
dict_with_arrays['key1'].append(1)
dict_with_arrays['key1'].append(2)

dict_with_arrays['key2'] = [3, 4, 5]  # 初始化值为一个具有初始元素的列表

# 输出字典中的值
print(dict_with_arrays['key1'])  # 输出: [1, 2]
print(dict_with_arrays['key2'])  # 输出: [3, 4, 5]

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ESP32入门九(超声波测距传感器)

一、超声波测距原理 超声波测距模块可提供非接触式距离感测功能;模块包括超声波发射器、接收器和控制电路。其工作原理为当接收到信号后,发射器发出音速的超声波信号,信号在受到物品阻挡时会返回并被接收器检测到,当接收器检测信…

Django学习3——靓号管理

目录 靓号管理 表结构和数据 根据表结构的需求,在models.py中创建类(由类生成数据库中的表) 在数据库生成表 自己在数据模拟创建一些数据: 靓号列表 新建靓号 编辑靓号 删除靓号 搜索靓号 靓号管理 表结构和数据 根…

【Linux Shell学习笔记】Linux Shell的位置参数与函数

一、位置参数 位置参数,也被称之为位置变量,通过位置参数,可以在执行程序的时候,向程序传递数据 1.1 shell接收参数的方法 1.2 向shell传递参数的方法 二、函数 2.1 函数基础 2.1.1 函数简介 函数本质上就是一个代码块&#xf…

CentOS虚拟机硬盘管理

CentOS虚拟机硬盘管理 一、创建虚拟机时分配硬盘 创建虚拟机时,在下图这个页面需要重新选择一下硬盘,可以对硬盘进行配置。 默认自动分区 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/e9ce72af3d934e75be95f7f86860e92b.png 选择确认分…

【REST2SQL】01RDB关系型数据库REST初设计

0 概念 REST2SQL实现连接数据库,数据库的表或视图即可提供REST的GET\POST\PUT\DELETE请求,SQL可执行SQLECT\INSERT\UPDATE\DELETE语句。 0.1 RDB Relational Database 即关系型数据库(简称 RDB)是一种以关系(即表格…

CLion Nova:全新的C/C++ IDE

CLion Nova是一款备受期待的集成开发环境(IDE),由JetBrains专门为C/C开发者设计。这款IDE提供了许多新的功能和改进,使用 ReSharper C/Rider C 语言引擎而不是 CLion “传统” 引擎,以满足C/C开发者的需求。目前预览版…

全球电商平台API数据稳定接入

API是什么? API就是接口,就是通道,负责一个程序和其他软件的沟通,本质是预先定义的函数。”比如:电脑需要调用手机里面的信息,这时候你会拿一根数据线将电脑手机连接起来,电脑和手机上连接数据…

迪杰斯特拉(Dijkstra)算法详解

【专栏】数据结构复习之路 这篇文章来自上述专栏中的一篇文章的节选: 【数据结构复习之路】图(严蔚敏版)两万余字&超详细讲解 想了解更多图论的知识,可以去看看本专栏 Dijkstra 算法讲解: 迪杰斯特拉算法(Di…

ASM-HEMT射频建模

关于ASM-HEMT RF模型 ASM-HEMT是指用于氮化镓高迁移率电子晶体管的先进SPICE模型。该模型于2018年由紧凑模型委员会(CMC)进行了标准化。 ASM-HEMT模型涵盖了氮化镓器件在射频(RF)和功率电子应用中的应用。模型手册提供了模型方程…

Win10 + 4090显卡配置深度学习环境 + gaussian-splatting配置 + 实测自己的场景

目录 1 安装Anaconda 2023.09版本 2 安装CUDA11.8 3 安装深度学习库Cudnn8.6.0 4 安装VSCODE2019 5 安装Colmap3.8 6 安装git 7 安装Python3.10 Pytorch2.0.0 7 安装项目 8 采集数据 8.1 IPhone 14 pro 拍摄30张照片左右 做预处理 8.2 生成colmap位姿等信息 8.3 开…

负载均衡概述

负载均衡 负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。 四层负载均衡 vs 七层负载均衡 四层负载均衡(目标地址和端口交换)…

【数据结构和算法】找出两数组的不同

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 哈希类算法题注意事项 2.2 方法一:哈希法 三、代码 3.1 方法一:哈希法 四…

2023.12.30 Pandas操作

目录 1. pandas基础 1.1 pandas的基本介绍 1.2 pandas基础使用 2. pandas的数据结构 2.1 series对象 2.2 使用列表,自定义索引,字典,元组方式创建series对象 2.3 Series对象常用API 2.4 Series 对象的运算 1. pandas基础 1.1 pandas的基本介绍 Python在数据处理上独步天下…

ES6语法(五)封装模块化公共工具函数、引入npm包 ,并上传到npm中进行下载

1. 模块化 模块化是指将一个大的程序文件,拆分为许多小的文件(模块),然后将小的文件组合起来。 1.1. 优点 (1)防止命名冲突 (2)代码复用 (3)高维护性 &…

计算机网络【EPOLL 源码详解】

IO多路复用 在以前,传统的网络编程是多线程模型,一个线程单独处理一个请求。 然而,线程是很昂贵的资源: 线程的创建和销毁成本很高,linux的线程实际上是特殊的进程;因此通常会使用线程池来减少线程创建和…

啊哈c语言——4.10、for隆重登场(一起来找茬)

下面这段代码是求12345678910的值。其中有4个错误&#xff0c; 快来改正吧&#xff01; 改正后&#xff1a; #include <stdio.h> #include <stdlib.h> int main( ) {int i, sum;sum1;for(i1; i<10;i){sumsum*i;}printf("%d", sum);system("paus…

[C#]OpenCvSharp实现Yolov8 Face Landmarks 人脸关键点检测

介绍&#xff1a; github地址&#xff1a;https://github.com/derronqi/yolov8-face 效果&#xff1a; 项目&#xff1a; 代码&#xff1a; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; u…

Chapter 7 - 8. Congestion Management in Ethernet Storage Networks以太网存储网络的拥塞管理

Stomped CRC Counters Stomped CRC counters help in finding the location of bit errors in a network that uses cut-through switches. More precisely, these counters help in finding where bit errors do not exist. Stomped CRC 计数器有助于在使用直通式交换机的网络…

Python+Django+Mysql+SimpleUI搭建后端用户管理系统(非常详细,每一步都清晰,列举了里面所有使用的方法属性)

一、在Anaconda环境下创建虚拟环境 &#xff08;1&#xff09;打开Anaconda Prompt(install)&#xff0c;创建虚拟环境&#xff0c;如下图所示&#xff1a; 方法一&#xff1a;默认情况下虚拟环境创建在Anaconda安装目录下的envs文件夹中 conda create --name usermanage …

轻松删除文件名中的符号,使用替换功能,让管理文件更加得心应手!

在我们的日常生活和工作中&#xff0c;文件管理是一项必不可少的任务。而一个整洁、有序的文件名系统则有助于我们快速找到所需的文件。如果你发现文件名中存在一些不必要的符号&#xff0c;那么这款文件重命名工具将是你的得力助手。它具备强大的替换功能&#xff0c;可以轻松…
最新文章