LeetCode_拓扑排序_BFS_中等_1462.课程表 IV

目录

  • 1.题目
  • 2.思路
  • 3.代码实现(Java)

1.题目

你总共需要上 numCourses 门课,课程编号依次为 0 到 numCourses - 1 。你会得到一个数组 prerequisite ,其中 prerequisites[i] = [ai, bi] 表示如果你想选 bi 课程,你必须先选 ai 课程。

有的课会有直接的先修课程,比如如果想上课程 1 ,你必须先上课程 0 ,那么会以 [0,1] 数对的形式给出先修课程数对。先决条件也可以是间接的。如果课程 a 是课程 b 的先决条件,课程 b 是课程 c 的先决条件,那么课程 a 就是课程 c 的先决条件。

你也得到一个数组 queries ,其中 queries[j] = [uj, vj]。对于第 j 个查询,您应该回答课程 uj 是否是课程 vj 的先决条件。返回一个布尔数组 answer,其中 answer[j] 是第 j 个查询的答案。

示例 1:
在这里插入图片描述
输入:numCourses = 2, prerequisites = [[1,0]], queries = [[0,1],[1,0]]
输出:[false,true]
解释:课程 0 不是课程 1 的先修课程,但课程 1 是课程 0 的先修课程。

示例 2:
输入:numCourses = 2, prerequisites = [], queries = [[1,0],[0,1]]
输出:[false,false]
解释:没有先修课程对,所以每门课程之间是独立的。

示例 3:
在这里插入图片描述
输入:numCourses = 3, prerequisites = [[1,2],[1,0],[2,0]], queries = [[1,0],[1,2]]
输出:[true,true]

提示:
2 <= numCourses <= 100
0 <= prerequisites.length <= (numCourses * (numCourses - 1) / 2)
prerequisites[i].length == 2
0 <= ai, bi <= n - 1
ai != bi
每一对 [ai, bi] 都 不同
先修课程图中没有环。
1 <= queries.length <= 104
0 <= ui, vi <= n - 1
ui != vi

2.思路

(1)拓扑排序 & BFS
本题与 210.课程表 II 这题类似,可以使用拓扑排序 + BFS 来解决,只不过在遍历图的过程中,需要记录每对节点之间的关系即可,具体代码如下所示。

相关题目:
LeetCode_环检测_DFS_中等_207.课程表
LeetCode_拓扑排序_BFS_中等_210.课程表 II
LeetCode_贪心算法_困难_630.课程表 III

3.代码实现(Java)

//思路1————拓扑排序 & BFS
class Solution {public List<Boolean> checkIfPrerequisite(int numCourses, int[][] prerequisites, int[][] queries) {//邻接表List<Integer>[] graph = new ArrayList[numCourses];for (int i = 0; i < numCourses; i++) {graph[i] = new ArrayList<>();}//保存每个节点的入度int[] inDegree = new int[numCourses];for (int[] edge : prerequisites) {graph[edge[0]].add(edge[1]);inDegree[edge[1]]++;}Queue<Integer> queue = new ArrayDeque<>();for (int i = 0; i < numCourses; i++) {if (inDegree[i] == 0) {queue.offer(i);}}// isPre[i][j] = true 表示课程 i 是课程 j 的先决条件boolean[][] isPre = new boolean[numCourses][numCourses];while (!queue.isEmpty()) {int node = queue.poll();for (int next : graph[node]) {isPre[node][next] = true;for (int i = 0; i < numCourses; i++) {isPre[i][next] = isPre[i][next] || isPre[i][node];}inDegree[next]--;if (inDegree[next] == 0) {queue.offer(next);}}}List<Boolean> res = new ArrayList<>();for (int[] query : queries) {res.add(isPre[query[0]][query[1]]);}return res;}
}

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

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

相关文章

在macOS使用VMware踩过的坑

目录 MAC提示将对您的电脑造成伤害/MAC OS 升级到10.15.3后vmware虚拟机黑屏 mac系统下&#xff0c;vm虚拟机提示打不开/dev/vmmon mac VMware Workstation 在此主机上不支持嵌套虚拟化 mac VMware清理虚拟机空间 VMware Fusion 13在M2芯片的Mac上安装 Windows 11 首先需…

精品SpringCloud的B2C模式在线学习网微服务分布式

《[含文档PPT源码等]精品基于SpringCloud实现的B2C模式在线学习网站-微服务-分布式》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;Java 框架&#xff1a;springcloud JDK版本&#xf…

Spring boot 实践(16)Nacos server 2.2.3 下载安装

1、Nacos server下载 登录网址Releases alibaba/nacos GitHub&#xff0c;进入下载页面&#xff0c;显示如下&#xff1a; 选择“nacos-server-2.2.3.zip”版本 解压缩&#xff0c;目录文件如下图所示&#xff1a; 配置文件位于“conf”目录下&#xff0c;名称为“applicat…

java在mysql中查询内容无法塞入实体类中,报错 all elements are null

目录 一、问题描述二、解决方案 一、问题描述 java项目中整体配置了mysql的驼峰式字段匹配规则。 mybatis.configuration.map-underscore-to-camel-casetrue由于项目需求&#xff0c;需要返回字段为file_id&#xff0c;file_url&#xff0c;并且放入实体类中&#xff0c;实体…

Java 获取豆瓣电影TOP250

对于爬虫&#xff0c;Java并不是最擅长的&#xff0c;但是也可以实现&#xff0c;此次主要用到的包有hutool和jsoup。 hutool是一个Java工具包&#xff0c;它简化了Java的各种API操作&#xff0c;包括文件操作、类型转换、HTTP、日期处理、JSON处理、加密解密等。它的目标是使…

laravel框架 - cache篇

Laravel中的cache为我们提供了三种缓存机制。 Redis&#xff0c;memcache&#xff0c;以及框架的文件缓存。 这里主要看的是cache中的文件缓存。 一&#xff1a;访问多个缓存存储 使用 Cache 门面&#xff0c;你可以使用 store 方法访问不同的缓存存储器&#xff0c;传入 s…

C++版本的OpenCV实现二维图像的卷积定理(通过傅里叶变换实现二维图像的卷积过程,附代码!!)

C版本的OpenCV库实现二维图像的卷积定理过程详解 前言一、卷积定理简单介绍二、不同卷积过程对应的傅里叶变换过程1、“Same”卷积2、“Full”卷积3、“Valid”卷积 三、基于OpenCV库实现的二维图像卷积定理四、基于FFTW库实现的二维图像卷积定理五、总结与讨论 前言 工作中用…

pgzrun 拼图游戏制作过程详解(6,7)

6. 检查拼图完成 初始化标记成功的变量Is_Win Is_WinFalse 当鼠标点击小拼图时&#xff0c;判断所有小拼图是否都在正确的位置&#xff0c;并更新Is_Win。 def on_mouse_down(pos,button): # 当鼠标被点击时# 略is_win Truefor i in range(6):for j in range(4):Square S…

【Java|golang】210. 课程表 II---拓扑排序

一、拓扑排序的定义&#xff1a; 先引用一段百度百科上对于拓扑排序的定义&#xff1a; 对一个有向无环图 ( Directed Acyclic Graph 简称 DAG ) G 进行拓扑排序&#xff0c;是将 G 中所有顶点排成一个线性序列&#xff0c;使得图中任意一对顶点 u 和 v &#xff0c;若边 <…

栈与队列--逆波兰表达式求值

根据 逆波兰表示法&#xff0c;求表达式的值。 有效的运算符包括 , - , * , / 。每个运算对象可以是整数&#xff0c;也可以是另一个逆波兰表达式。 说明&#xff1a; 整数除法只保留整数部分。 给定逆波兰表达式总是有效的。换句话说&#xff0c;表达式总会得出有效数值…

春秋云镜 CVE-2013-2134

春秋云镜 CVE-2013-2134 S2-015 靶标介绍 2.3.14.3 之前的 Apache Struts 2 允许远程攻击者通过标记在通配符匹配期间未正确处理的所提出的操作名称的请求执行任何 OGNL 代码&#xff0c;这是与 CVE-2013-2135 不同的漏洞。 启动场景 漏洞利用 工具利用 得到flag flag{b92…

RuntimeError: “upsample_nearest2d_channels_last” not implemented for ‘Half’

Found a thread on github: https://github.com/AUTOMATIC1111/stable-diffusion-webui/issues/8555 ZXBmmt says: edit “stable-diffusion-webui/webui-user.sh” find COMMANDLINE_ARGS variable Use the following configuration&#xff1a; export COMMANDLINE_ARGS…

01目标检测-问题引入

目录 一、目标检测问题定义 二、目标检测过程中的常见的问题 三、目标检测VS图像分类区别 目标检测&#xff1a; 图像分类&#xff1a; 总结&#xff1a; 四、目标检测VS目标分割 目标分割&#xff1a; 目标检测是计算机视觉领域的一个重要任务&#xff0c;旨在从图像或…

Django系列:Django开发环境配置与第一个Django项目

Django系列 Django开发环境配置与第一个Django项目 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/1328…

RFID电厂物资管理系统,助力智慧电厂升级改造

应用背景 随着智能化技术的快速发展&#xff0c;电力行业也面临着升级改造的需求&#xff0c;传统的电厂物资管理方式存在着诸多问题&#xff0c;如信息不透明、物资丢失和错误管理等&#xff0c;为了解决这些问题&#xff0c;RFID技术被广泛应用于电厂物资管理系统中。 传统…

[交互]接口与路由问题

[交互]接口与路由问题 场景描述问题分析解决方案 这是在实战开发过程中遇到的一个问题&#xff0c;所以导致产生了服务端如何区分浏览器请求的是前端路由还是 api 接口的问题&#xff1f;&#xff1f; 场景描述 这是一个前后端分离开发的项目&#xff0c;因此前端一般都会使用…

VR头显Unity下如何实现毫秒级延迟的RTMP或RTSP播放?

技术背景 虚拟现实&#xff08;VR&#xff09;技术的互动性和沉浸感&#xff0c;为我们提供了一种全新的视觉体验&#xff0c;不过&#xff0c;如果需要实现真正的沉浸式体验&#xff0c;VR播放的延迟问题非常重要。 好多VR场景下&#xff0c;如果存在延迟&#xff0c;用户在…

Android 官方屏幕适配之ScreenMatch

背景&#xff1a; Android 项目的一个app需要适配手机平板&#xff0c;为了一套UI和可以适配2个不同屏幕&#xff0c;记录一个适配的技巧&#xff1a; 前提&#xff0c;使用这个框架&#xff1a;GitHub - wildma/ScreenAdaptation: :fire:一种非常好用的 Android 屏幕适配——…

第9节-PhotoShop基础课程-移动抓手缩放工具

文章目录 前言1. 移动工具1.移动工具1.自动选择&#xff08;图层和组&#xff09;2.显示变换控件 &#xff08;Shift 变换/ Ctrl 变换&#xff09;3.自由变换 Ctrl T &#xff08;Shift 变换/ Ctrl 变换&#xff09;4.对齐功能 2.画板工具 V1. 创建画板并作图2.导出画板 2.路…

Blender批量修改名称

假如在Blender里按顺序添加了多个mesh&#xff0c;名字后缀按照数字1,2,3…编号&#xff0c;此时又要插入一个新的mesh&#xff0c;那么这个mesh之后的其它mesh名字都要加1&#xff0c;此时该怎么办呢&#xff1f; 比较简单的办法是把新mesh后面的mesh名称一个一个手动加1&…