【力扣100】207.课程表

news/2024/10/22 14:44:45/

添加链接描述

class Solution:def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:# 思路是计算每一个课的入度,然后使用队列进行入度为0的元素的进出# 数组:下标是课程号,array[下标]是这个课程的入度# 哈希表:key是课程号,value是以这个课程号为先导课的课程列表!注意是列表!这里需要使用defaultdictmylist=[0]*numCoursesmydict=collections.defaultdict(list)for i in prerequisites:mylist[i[0]]+=1mydict[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-=1if cur_list:for follcourse in cur_list:mylist[follcourse]-=1if mylist[follcourse]==0:myque.append(follcourse)# 验证入度数组是不是都为0,如果不是0,则返回falsefor i in mylist:if i !=0:return Falsereturn 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.ppmy.cn/news/1286003.html

相关文章

腾讯云轻量应用服务器是什么?详细介绍

腾讯云轻量应用服务器开箱即用、运维简单的轻量级云服务器,CPU内存带宽配置高并且价格特别便宜,大带宽,但是限制月流量。轻量2核2G3M带宽62元一年、2核2G4M优惠价118元一年,540元三年、2核4G5M带宽218元一年,756元3年、…

[EFI]机械革命Mechrevo-蛟龙5-76Q电脑 Hackintosh 黑苹果efi引导文件

硬件型号驱动情况主板 Mechrevo-Jiaolong-76Q 处理器AMD Ryzen 7 5800h已驱动内存2 x 8GB DDR4 2133MHz已驱动硬盘LITEON CV5-8Q256 256GB已驱动显卡核显已驱动声卡Realtek ALC293 (ALC3235)已驱动网卡Intel I219-LM Gigabit Ethernet已驱动无线网卡蓝牙Intel Wireless-AX200 D…

servlet总结

目录 1.生命周期 2.线程总结 3.配置 4.请求和响应 5.会话管理 6.过滤和监听器 7.处理表单数据 8.与JSP集成 9.异常处理 10.安全性和认证 Servlet是一种基于Java的Web组件,用于处理客户端请求并生成动态Web内容。以下是关于Servlet的一些总结 1.生命周期 …

C++图论之强连通图

1. 连通性 什么是连通性? 连通,字面而言,类似于自来水管道中的水流,如果水能从某一个地点畅通流到另一个地点,说明两点之间是连通的。也说明水管具有连通性,图中即如此。 无向图和有向图的连通概念稍有差…

面试题:从 MySQL 读取 100w 数据进行处理,应该怎么做?

文章目录 背景常规查询流式查询MyBatis 流式查询接口为什么要用流式查询? 游标查询OptionsResultType注意:原因: 非流式查询和流式查询区别: 背景 大数据量操作的场景大致如下: 数据迁移数据导出批量处理数据 在实际…

华为无线ac双链路冷备和热备配置案例

所谓的冷备和热备,冷备就是不用vrrp和hsb协议同步ap和用户信息,主的断了等七十五秒后,备的capwap和ap连接上去。 双链路冷备不用vrrp和hsb 双链路热备份只用hsb同步ap和用户信息,不用vrrp,两个ac可以不用在同一个二层…

开始使用克魔助手

摘要 克魔助手是一款功能丰富的手机助手软件,提供了诸多实用的功能模块,包括手机系统信息显示、应用管理、文件管理、描述文件安装与测试、崩溃日志、实时日志、截图、活跃程序、性能监控和网络抓包等。本文将对克魔助手的界面概览和各功能模块进行详细…

k8s中的pod及创建pod的方式

1. 什么是pod? 在 Kubernetes(K8s)中,Pod 是最小的可部署单元,它是容器的一种抽象层级。通俗地说,Pod 就像是一个运行在 Kubernetes 上的应用程序实例,但实际上,Pod 有一些特殊之处。 让我们…