【力扣100】207.课程表

news2025/1/17 1:05:29

添加链接描述

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.coloradmin.cn/o/1345401.html

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

相关文章

【华为机试】2023年真题B卷(python)-解密犯罪时间

一、题目 题目描述: 警察在侦破一个案件时,得到了线人给出的可能犯罪时间,形如 “HH:MM” 表示的时刻。 根据警察和线人的约定,为了隐蔽,该时间是修改过的,解密规则为: 利用当前出现过的数字&am…

回归预测 | MATLAB实OOA-LSTM基于鱼鹰优化算法优化长短期记忆网络的多输入单输出数据回归预测模型 (多指标,多图)

回归预测 | MATLAB实OOA-LSTM基于鱼鹰优化算法优化长短期记忆网络的多输入单输出数据回归预测模型 (多指标,多图) 目录 回归预测 | MATLAB实OOA-LSTM基于鱼鹰优化算法优化长短期记忆网络的多输入单输出数据回归预测模型 (多指标&a…

DHCP学习记录

目录 客户端向DHCP服务端申请租用IP的4个阶段: 客户端向HDCP服务器续租IP过程: 客户端重新连接租用IP过程: 客户端释放IP 声明: (Dynamic Host Configuration Protocol)动态主机配置协议,客户端向DHCP服务端申请获得ip的一种约定俗成的话语(协议) 手工配置方式…

AJAX:整理3:原生AJAX的相关操作

注意AJAX的步骤 // 1.创建对象 const xhr new XMLHttpRequest()// 2.初始化 设置 请求方法 和 url xhr.open("GET", "http://localhost:9090/server")// 3.发送 xhr.send()// 4.事件绑定 处理服务端返回的结果 // readyState 是xhr对象中的属性&#xff…

初识javaWeb

一、JavaWeb是什么? 1、概念 javaWeb指的是使用java语言进行互联网领域项目开发的技术栈——进行web项目开发所需的技术的集合。 -Web前端——在浏览器中用户可以看到的网页 -Web后端——为前端提供数据的程序 2、Web项目 java语言是可以进行多种类型的项目开发&a…

如何处理并下载Sentinel-5数据

SENTINEL-5是欧洲空间局(European Space Agency,ESA)Copernicus计划中的一颗地球观测卫星。SENTINEL-5的主要任务是监测大气成分,特别是臭氧、氮二氧化物、二氧化硫、甲烷和其他气体的分布。这些观测对于了解大气污染、气候变化和…

再见2023,你好2024(附新年烟花python实现)

亲爱的朋友们: 写点什么呢,我已经停更两个月了。2023年快结束了,时间真的过得好快,总要写点什么留下纪念吧。这一年伴随着许多挑战和机会,给了我无数的成长和体验。坦白说,有时候我觉得自己好像是在时间的…

亚信安慧AntDB数据库引领数字时代通信创新

在数字经济与实体经济深度融合的时代,通信行业正迎来前所未有的新机遇。特别是在中国信通院的预测中,2027年5G专网市场规模预计将达到802亿元,呈现出显著的增长态势,年复合增长率高达42%。 亚信安慧AntDB数据库一直致力于紧跟科技…

AppWeb认证绕过漏洞(CVE-2018-8715)

一、环境搭建 二、影响版本 三、构造payload Authorization: Digest usernameadmin 四、抓包获取sesion 五、修改数据包、认证头 记得设置用户名 六、漏洞存在特征(Gigest)

实验九 基于FPGA的计数译码显示电路设计

基本任务一:利用FPGA硬件平台上的4位数码管做静态显示,用SW0-3输入BCD码,用SW4-7控制数码管位选 m100: frediv: decoder: 基本任务二:利用FPGA硬件平台上的4位数码管显示m10技术结果 扩展任…

centos 7.9 升级系统默认的python2.7到python 2.7.18

centos 7.9 升级系统默认的python2.7到python 2.7.18 备份旧版本 mv /usr/bin/python /usr/bin/python_2.7.5 下载新版本 Download Python | Python.org Python Release Python 2.7.18 | Python.org wget https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tgz cd /…

gitLab页面打tag操作步骤

作者:moical 链接:gitLab页面打tag简单使用 - 掘金 (juejin.cn) 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 ---------------------------------------------------------------------…

如何确定微服务项目中Spring Boot、Spring Cloud、Spring Cloud Alibaba三者之间的版本

文章目录 1. 版本说明2. 版本依赖关系(推荐使用)3. 用脚手架快速生成微服务的pom.xml 本文描述如何确定微服务项目的Spring Boot、Spring Cloud、Spring Cloud Alibaba的版本。 1. 版本说明 我们知道Spring Boot、Spring Cloud、Spring Cloud Alibaba的版本选择一致性非常重要…

【MySQL】事务Transaction

1. 事务的概念 事务是什么 在业务逻辑中使用sql,面对一些较复杂的场景,是需要多个sql语句组合起来实现的。如:银行的转账业务,若客户A要转账100元给客户B,就要两条sql:A余额减100,B余额加100&a…

TV端Web页面性能优化实践

01 背景 随着互联网技术的持续创新和电视行业的高速发展,通过电视观看在线视频已经逐渐成为大众的重要娱乐方式。奇异果App作为在TV设备上用户活跃度最高的应用之一,为广大用户提供了丰富的内容播放服务,除此之外,同样有会员运营、…

K8S容器的一则故障记录

一、故障现象 XXX反馈说某某业务服务异常,无法启动,需要进行协助排查。经常会接到这样一个需求,一开始无法清楚知道具体什么问题,需要跟一线运维人员详细做沟通,了解故障问题的细节。 根据一线运维人员的反馈&#xff…

androidStudio 没有新建flutter工程的入口?

装了flutter dart 插件 执行了 flutter doctor 也执行了 flutter doctor --android-license 最后重启了 androidStudio 还是没发现在哪新建flutter项目工程 原来 plugins 下的 Android APK Support没有勾选

Java多线程<三>常见的多线程设计模式

多线程的设计模式 两阶段线程终止 park方法 interrupted() 会让他失效。 使用volatile关键字进行改写 单例模式 双锁检测 保护性暂停 实现1: package threadBase.model;/*** author: Zekun Fu* date: 2022/5/29 19:01* Description:* 保护性暂停,* …

后端程序员React初接触1

后端程序员React初接触 学习react基础与相关库的使用学习 包括react基础 路由 组件库等等 react是用于构建用户界面的JavaScript库 发送请求获取数据处理数据操作dom呈现页面(react帮忙操作dom) 数据渲染为视图 有facebook打造并开源 解决的问题 dom操…

MFC 文档类

目录 文档类概述 文档类的使用 程序框架过程 LoadFrame执行分析 框架窗口 WM_CREATE 消息处理 视图窗口 WM_CREATE 消息处理 对象关系图 窗口切分 命令消息处理顺序 文档类和视图类关系 文档类概述 相关类CDocument,作用:提供了一个用于管理数…