当前位置: 首页 > news >正文

210. 课程表 II Python

文章目录

  • 一、题目描述
      • 示例 1
      • 示例 2
      • 示例 3
  • 二、代码
  • 三、解题思路


一、题目描述

现在你总共有 numCourses 门课需要选,记为 0numCourses - 1。给你一个数组 prerequisites ,其中 prerequisites[i] = [ai, bi] ,表示在选修课程 ai 前 必须 先选修 bi

例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示:[0,1] 。

返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回 任意一种 就可以了。如果不可能完成所有课程,返回 一个空数组

示例 1

输入:numCourses = 2, prerequisites = [[1,0]]
输出:[0,1]
解释:总共有 2 门课程。要学习课程 1,你需要先完成课程 0。因此,正确的课程顺序为 [0,1] 。

示例 2

输入:numCourses = 4, prerequisites = [[1,0],[2,0],[3,1],[3,2]]
输出:[0,2,1,3]
解释:总共有 4 门课程。要学习课程 3,你应该先完成课程 1 和课程 2。并且课程 1 和课程 2 都应该排在课程 0 之后。
因此,一个正确的课程顺序是 [0,1,2,3] 。另一个正确的排序是 [0,2,1,3] 。

示例 3

输入:numCourses = 1, prerequisites = []
输出:[0]

提示:
1 <= numCourses <= 2000
0 <= prerequisites.length <= numCourses * (numCourses - 1)
prerequisites[i].length == 2
0 <= ai, bi < numCourses
ai != bi
所有[ai, bi] 互不相同

二、代码

代码如下:

class Solution:def findOrder(self, numCourses: int, prerequisites: List[List[int]]) -> List[int]:result = []# 本题默认prerequisites中的课程一定存在于numCourses_list中nodes = [i for i in range(numCourses)]indegree = [0 for i in range(numCourses)]for i in range(len(prerequisites)):indegree[prerequisites[i][0]] += 1print(indegree)while len(nodes) != 0:if 0 not in indegree:return []de_index = indegree.index(0)de_node = nodes[de_index]result.append(de_node)for i in range(len(prerequisites)):if prerequisites[i][1] == de_node:indegree[nodes.index(prerequisites[i][0])] -= 1nodes.pop(de_index)indegree.pop(de_index)print(result)return result

三、解题思路

本题在207. 课程表 Python的基础上要求输出具体的课程学习序列,在之前使用入度表的基础上,只需要将每次删除的入度为 0 的节点添加进入数组 result 中即可,表示已经学习了该课程,如果无法学完则直接返回一个空数组。最后如果能够学完全部课程,返回之前记录的 result 数组即可。

http://www.lryc.cn/news/108658.html

相关文章:

  • 【LeetCode 算法】Linked List Cycle II 环形链表 II
  • 蒸散发与植被总初级生产力估算
  • uniapp微信小程序底部弹窗自定义组件
  • 人工智能的最新进展:2024年将会发生什么?
  • 使用Golang实现一套流程可配置,适用于广告、推荐系统的业务性框架——组合应用
  • DNS入门学习:DNS缓存的原理和作用(中科三方)
  • Linux虚拟机安装tomcat(图文详解)
  • Matlab对TMS320F28335编程--SVPWM配置互补PWM输出
  • MySQL数据库——多表操作
  • Java版本spring cloud + spring boot企业电子招投标系统源代码 tbms
  • css实现,正常情况下div从左到右一次排列,宽度超出时,右侧最后一个div固定住,左侧其他div滚动
  • 【Linux手动搭建Sftp,创建用户、用户组及删除用户】
  • 云上 Index:看「简墨」如何为云原生打造全新索引
  • Linux安装cuda和cudnn教程
  • 短视频矩阵源码
  • 群狼调研—连锁化妆品品牌门店神秘顾客调查的行家
  • C# 回文链表
  • 基于freertos的温湿度蓝牙系统
  • 华为云CTS 使用场景
  • 【css】nth-child选择器实现表格的斑马纹效果
  • 找视频素材就上这8个网站,免费可商用,马住了。
  • Springboot部署ELK实战
  • 【Leetcode】76.最小覆盖子串(困难)
  • C++ 指针函数和函数指针
  • JAVA实现存在更新不存在插入与及多余的进行删除(三)
  • iMX6ULL驱动开发 | OLED显示屏SPI驱动实现(SH1106,ssd1306)
  • 拥抱创新:用Kotlin开发高效Android应用
  • Effective Java笔记(20)接口优于抽象类
  • react学习笔记——1. hello react
  • 明明已经安装字体,但IDEA、CLION无法找到思源黑体/Source Hans Sans的问题解决