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

news2025/1/10 12:06:18

目录

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

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

相关文章

解决Spring Boot文件上传问题:`MultipartException` 和 `FileUploadException`

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f405;&#x1f43e;猫头虎建议程序员必备技术栈一览表&#x1f4d6;&#xff1a; &#x1f6e0;️ 全栈技术 Full Stack: &#x1f4da…

aardio语言的通用数据表维护

import win.ui; /*DSG{{*/ var winform win.form(text"通用数据表维护";right617;bottom427;bgcolor15780518) winform.add( buttonAdd{cls"button";text"增加空行";left469;top40;right564;bottom80;flat1;z2}; buttonDel{cls"button&quo…

应用在触控一体机触摸屏中的电容式触控芯片

从智能手机出现以来&#xff0c;触控一体机行业迎来了飞速的发展&#xff0c;这种人机交互的方式&#xff0c;迅速改变了人们的生活&#xff0c;一时之间&#xff0c;触控无处不在&#xff0c;从智能手机延伸到平板电脑&#xff0c;再到商业领域的诸多触控产品&#xff0c;可以…

浅析三维模型3DTile格式轻量化处理常见问题与处理措施

浅析三维模型3DTile格式轻量化处理常见问题与处理措施 三维模型3DTile格式的轻量化处理是大规模三维地理空间数据可视化的关键环节&#xff0c;但在实际操作过程中&#xff0c;往往会遇到一些问题。下面我们来看一下这些常见的问题以及对应的处理措施。 变形过大&#xff1a;压…

【C++】详解std::mutex

2023年9月11日&#xff0c;周一中午开始 2023年9月11日&#xff0c;周一晚上23&#xff1a;25写完 目录 概述头文件std::mutex类的成员类型方法没有std::mutex会产生什么问题问题一&#xff1a;数据竞争问题二&#xff1a;不一致lock和unlock死锁 概述 std::mutex是C标准库中…

2024苹果手机软件备份软件工具iMazing

很多人都会忘记备份iOS 资料&#xff0c;或者因为设置备份时间、位置等不到位&#xff0c;导致需要用的时候找不到备份。接下来&#xff0c;小编就来教大家iMazing软件备份功能的几个设置小技巧&#xff0c;都在软件界面的“选项”内调整&#xff0c;减少备份过程中的出错。 图…

【Electron】electron与cljs的处理

实现效果: 前言&#xff1a; 如何用cljs的方式&#xff0c;编写electron应用&#xff0c;可以实现多窗体应用 要使用ClojureScript&#xff08;CLJS&#xff09;编写一个 Electron 应用程序&#xff0c;并实现多窗体功能&#xff0c;您可以按照以下步骤进行操作&#xff1a; …

管易云与金蝶云星空对接集成仓库查询打通仓库新增

管易云与金蝶云星空对接集成仓库查询打通仓库新增 接通系统&#xff1a;管易云 管易云是金蝶旗下专注提供电商企业管理软件服务的子品牌&#xff0c;先后开发了C-ERP、EC-OMS、EC-WMS、E店管家、BBC、B2B、B2C商城网站建设等产品和服务&#xff0c;涵盖电商业务全流程。 对接目…

KEIL5工程改名3步骤

实际上无法另存&#xff0c;通过复制改名方式来间接完成。 如下3个步骤可以完成改名 &#xff08;1&#xff09;直接修改FX3U_STM32F407.uvprojx 文件名称&#xff0c;体现在左上角第一行&#xff0c;Project&#xff1a;xxxx &#xff08;2&#xff09;点开工程option&#…

SEO和SEM的区别与联系:优化和推广的艺术

SEO和SEM的区别与联系&#xff1a;优化和推广的艺术 在当今商业竞争日益激烈的市场环境下&#xff0c;企业对于网站的建设和管理越来越重视。为了吸引更多的潜在客户&#xff0c;企业不得不花费大量时间和资源来进行SEO优化和SEM推广。虽然二者都是提高网站流量的有效方法&…

如何像 Sealos 一样在浏览器中打造一个 Kubernetes 终端?

作者&#xff1a;槐佳辉。Sealos maintainer 在 Kubernetes 的世界中&#xff0c;命令行工具&#xff08;如 kubectl 和 helm&#xff09;是我们与集群交互的主要方式。然而&#xff0c;有时候&#xff0c;我们可能希望能够在 Web 页面中直接打开一个终端&#xff0c;执行这些命…

【前端项目】博客系统(页面设计)

文章目录 一、预期效果二、实现博客列表页三、实现博客正文页四、实现博客登录页五、实现博客编辑页 一、预期效果 代码详情见&#xff1a;gitee链接 &#x1f495; 博客列表页效果 &#x1f495; 博客详情页效果 &#x1f495; 博客登录页效果 &#x1f495; 博客编辑页效果…

2招教你解决:iPhone微信黑名单怎么恢复好友

前几天和男朋友吵架了&#xff0c;一气之下就把他拉黑了。现在想把他恢复回来&#xff0c;但是一直找不到他的聊天对话框&#xff0c;所以想问问大家该怎么将他移出黑名单。 无论是情侣吵架、朋友吵架还是与家人之间有矛盾&#xff0c;大家很容易在怒火的刺激下将对方拉入黑名单…

通过阿贝云免费云服务器部署vue3+vite项目

通过阿贝云免费云服务器部署vue3vite项目 阿贝云&#xff1a;https://www.abeiyun.com 首先访问阿贝云登录后申请服务器&#xff0c;需要关注微信公众号绑定 然后我们给服务器安装操作系统&#xff0c;这里我使用了centos7.6 这里我使用finalshell 连接服务器 我们首先配置ng…

apple pencil的替代品买啥比较好?平价电容笔排行榜

电容笔作为现在当下热销的数码配件&#xff0c;国内许多品牌商也加入其中&#xff0c;导致许多小伙伴购选的难度加大&#xff0c;太多品牌&#xff0c;看得眼花缭乱&#xff0c;更不知道哪些功能比较好&#xff0c;要想在这么多品牌中找到适合自己的&#xff0c;更是难上加难。…

2024年java面试--mysql(3)

系列文章目录 2024年java面试&#xff08;一&#xff09;–spring篇2024年java面试&#xff08;二&#xff09;–spring篇2024年java面试&#xff08;三&#xff09;–spring篇2024年java面试&#xff08;四&#xff09;–spring篇2024年java面试–集合篇2024年java面试–redi…

【前端开发】JS Vue React中的通用递归函数

文章目录 前言一、递归函数的由来二、功能实现1.后台数据2.处理数据3.整体代码 总结 前言 大家好&#xff0c;今天和大家分享一下在前端开发中js&#xff0c;vue&#xff0c;react的通用递归方法。 递归是指一个函数在执行过程中调用自身的行为。通过递归&#xff0c;可以将一…

SpringBoot 基于 MongoTemplate 的工具类

一、 什么是MongoDB MongoDB基于分布式文件存储的数据库。由C语言编写。MongoDB是一个高性能&#xff0c;开源&#xff0c;无模式的文档型数据库&#xff0c;是当前NoSql数据库中比较热门的一种。 他支持的数据结构非常松散&#xff0c;是类似json的bjson格式&#xff0c;因此…

SAP GUI 8.0 SMARTFORMS 使用SCR LEGACY TEXT EDITOR GUI8.00 禁用MSWORD

Smartforms使用WORD作为编辑器是很痛苦的一个事情&#xff0c;不支持拖拽&#xff0c;还很慢&#xff0c;各种不习惯&#xff0c;总之是非常的不舒服&#xff0c;能导致失眠。 在S/4以前的系统&#xff0c;可以使用TCODE I18N或者程序RSCPSETEDITOR或者暴力党直接改表TCP0I来…

SAP-ABAP-底表的创建和应用-01

1、创建底表SE11 给底表起个名字&#xff0c;点击创建 输入描述&#xff0c;选择交付类A&#xff0c;表视图维护选择&#xff1a;X允许显示维护。如果选择N&#xff0c;就不能维护数据了。 点击字段页签,维护字段 维护完自己需要的字段&#xff0c;点击激活&#xff0c;或触发…