【LeetCode: 1462. 课程表 IV:拓扑排序+图+广度优先搜索】

news2024/10/7 8:26:42

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 算法题 🚀

在这里插入图片描述

🍔 目录

    • 🚩 题目链接
    • ⛲ 题目描述
    • 🌟 求解思路&实现代码&运行结果
      • ⚡ 图+拓扑排序
        • 🥦 求解思路
        • 🥦 实现代码
        • 🥦 运行结果
    • 💬 共勉

🚩 题目链接

  • 1462. 课程表 IV

⛲ 题目描述

你总共需要上 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

🌟 求解思路&实现代码&运行结果


⚡ 图+拓扑排序

🥦 求解思路

  1. 首先在求解这道题目之前,可以先来学习一下前面的题目,课程表1博客地址,课程表2博客地址,这道题目的总体的求解思路和之前的题目一样,需要使用拓扑排序。

  2. 改题目的不一样的点在于:先决条件也可以是间接的。举个例子来说,如果课程 a 是课程 b 的先决条件,课程 b 是课程 c 的先决条件,那么课程 a 就是课程 c 的先决条件。那我们怎么来实现这块的代码呢?

  3. 求解思路如下:
    在这里插入图片描述

  4. 有了基本的思路,接下来我们就来通过代码来实现一下。

🥦 实现代码

class Solution {
    public List<Boolean> checkIfPrerequisite(int numCourses, int[][] prerequisites, int[][] queries) {
        List<Boolean> ans=new ArrayList<>();
        if(numCourses==0||prerequisites==null) return ans;
        List<Integer>[] list=new ArrayList[numCourses];
        Arrays.setAll(list,e->new ArrayList<>());
        Queue<Integer> queue=new LinkedList<>();
        int[] arr=new int[numCourses];
        boolean[][] flag=new boolean[numCourses][numCourses];
        int n=prerequisites.length;
        for(int i=0;i<n;i++){
            int from=prerequisites[i][0],to=prerequisites[i][1];
            list[from].add(to);
            arr[to]++;
        }
        for(int i=0;i<numCourses;i++){
            if(arr[i]==0){
                queue.add(i);
            }
        }
        while(!queue.isEmpty()){
            int next=queue.poll();
            for(int i:list[next]){
                flag[next][i]=true;
                for(int j=0;j<numCourses;j++){
                    flag[j][i]=flag[j][i]|flag[j][next];
                }
                if(--arr[i]==0){
                    queue.add(i);
                }
            }
        }
        for (int[] query : queries) {
            ans.add(flag[query[0]][query[1]]);
        }
        return ans;
    }
}

🥦 运行结果

时间复杂度&空间复杂度

在这里插入图片描述


💬 共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

开源社区赋能,Walrus 用户体验再升级

基于平台工程理念的应用管理平台 Walrus 已于上月正式开源&#xff0c;目前在 GitHub 已收获 177 颗星&#x1f31f; Walrus 希望打造简洁清爽的应用部署与管理体验&#xff0c;帮助研发与运维团队减少“内耗”工作&#xff0c;提升开发体验。 我们十分重视 Walrus 用户的…

SpringBoot AOP实现日志或告警(高级)

文章目录 总结&#xff1a;技术点 动态代理 模版方法模式 线程池异步处理/MQ一、目的二、难点&#xff1a;如何实现不同接口不同入参的数据转换?三、代码实现1.定义 切点注解接口2.定义 转换接口和模版方法3.定义 切面类4.定义 转换实现类5.业务方法使用注解6.常量类和枚举 …

pytorch中的seq2seq的人们国籍分类的示例

一、查漏补缺、用法分析&#xff1a; 1.这个简单的RNN网络示意图是我看过的最清晰明了的&#xff1a; 2.震惊&#xff01;原来之前关于seq2seq不明白的地方这里都进行了对应的讲解 02 用字符级别的循环神经网络来判断一个人的名字是哪个国家的常用名 - 知乎 (zhihu.com) 请认…

通过bigMap工具获取地图上各地方的经纬度范围

首先去官网下载bigMap工具,地址&#xff1a;http://www.bigemap.com/reader/download/ 下载成功点击软件&#xff0c;我们会出现这个页面&#xff0c;然后接下来就是选择区域了 相对应上面的操作之后&#xff0c;我们点击箭头&#xff0c;把我们的这个区域下载下来&#xff0c;…

win 10 安装新程序总是弹出提示:目前无法访问smartscreen

win 10 安装新程序总是弹出提示&#xff1a;目前无法访问smartscreen 因为后来无法再现警告&#xff0c;无法截图 搜索安全&#xff0c;找到 Windows 安全中心 找到“应用和浏览器控制”&#xff0c;关闭其中 2 项 SmartScreen 奇怪的是&#xff0c;之后我又改回去了&#x…

自助式数据分析平台:JVS智能BI功能介绍(二)数据集管理

数据集是JVS-智能BI中承载数据、使用数据、管理数据的基础&#xff0c;同样也是构建数据分析的基础。可以通俗地将其理解为数据库中的普通的表&#xff0c;他来源于智能的ETL数据加工工具&#xff0c;可以将数据集进行分析图表、统计报表、数字大屏、数据服务等制作。 在整体的…

Codeforces Round 897 (Div. 2) D. Cyclic Operations

置换环。 i向a[i]连边&#xff0c;最终一定会连出一个环&#xff0c;有可能存在着一条链在后边跟这&#xff0c;这个环的长度一定要等于k才是满足题意的。 出现链的原因就是链在成环的路上被另一条成环的路覆盖了。 对于任何k > 2的情况&#xff0c;链是可以任意长的&…

开学ipad手写笔有必要买原装吗?推荐平价好用的电容笔

学生们都在为即将到来的新学期做准备&#xff0c;而iPad又是必不可少的一部分。科技的飞速发展改变了人们的生活。现在&#xff0c;各种各样的电子和数字产品都有了&#xff0c;所以才有了这种可以和平板电脑搭配使用的电容笔。随着国内电容笔的芯片技术的不断进步&#xff0c;…

Ubuntu22.04开启后屏幕黄屏

1. 故障现象 系统&#xff1a;Ubuntu22.04 现象&#xff1a;电脑从开机到进入桌面一直屏幕黄屏 2. 故障分析 可能为屏幕色彩调节出现故障 3. 解决方案 系统设置——》色彩——》删除原来的配置&#xff08;remove profile&#xff09;——》添加配置Colorspace:Compatibl…

Ubuntu 22.04LTS + 深度学习环境安装全流程

一、 CUDA Toolkit 安装 1. 选择需要安装的版本(下载地址) 2. 选择自己的系统版本获取下载地址和安装指令 3. 运行安装指令进行安装 wget https://developer.download.nvidia.com/compute/cuda/12.2.2/local_installers/cuda_12.2.2_535.104.05_linux.run sudo sh cuda_12.2.…

_locked勒索病毒有什么特点,中了_locked勒索病毒该如何解决?

_locked是一种新型的勒索病毒&#xff0c;它通常通过电子邮件附件、恶意网站、云存储等途径传播。这种病毒一旦感染系统&#xff0c;就会加密受感染设备中的文件&#xff0c;并要求受害者支付一定数额的赎金以解密文件。这种病毒的特点、解决方案和预防措施如下&#xff1a; 特…

皕杰报表(BIOS Report)中设置序号的方法之四

我们分享了皕杰报表设置序号的三种方法&#xff0c;ds.#0&#xff0c;&cellx和row()&#xff0c;有时用这些方法设置序号并不能满足我们的需求&#xff0c;需要配以显示值的使用&#xff0c;使得序号分类更加清楚。我们看下面的主从表&#xff0c;是如何处理序号的显示值的…

第二证券:股利支付率和留存收益率的关系?

股利付出率和留存收益率是股票出资中非常重要的目标&#xff0c;它们可以反映公司的盈余才能和未来开展的潜力。那么&#xff0c;二者之间究竟有什么联系呢&#xff1f; 一、股利付出率和留存收益率的定义 股利付出率是指公司向股东分配的股息占当期净利润的比例&#xff0c;通…

【OAuth漏洞】第三方身份验证-账号接管

目录 什么是OAuth&#xff1f; OAuth 如何用于身份验证&#xff1f; 在 Booking.com 实施 OAuth 为什么 Booking.com OAuth 在 Booking.com 中的工作原理 Booking.com 帐户接管 安全漏洞 1 - 不允许唯一路径 安全漏洞 2 - 开放重定向 安全漏洞 1 2 帐户接管尝试 更…

navicat SSH连接数据库报错: Putty key format too new

问题 下载 Putty 0.79 生成了密钥&#xff0c;但是在navicat 15 使用SSH通道连接数据库报错: Putty key format too new 错误原因和处理 原来是因为生成的私钥格式是 V3 &#xff0c; navicat 15 只能识别 V2 所以&#xff0c;在 PuTTYgen Load 私钥&#xff0c;重新保存为 …

Windows MongoDB详细安装与配置

MongoDB详细安装与配置 下载地址 MongoDB安装 1.双击安装包进行安装 2.点击I accept the tems in the license agreement&#xff0c;点击Next 3.选择默认安装路径&#xff0c;点击completem&#xff1b;自定义安装路径&#xff0c;点击custom,点击browse选择路径&#xff0c…

听说,你想做大模型时代的应用层创业!

亲爱的科技探险家们和代码魔法师们&#xff1a; 未来的钟声已经敲响&#xff0c;预示着一场极度炫酷的虚拟现实游戏即将展开。从初期简单的智能识别&#xff0c;到设计师级别的图纸设计&#xff0c;生成式AI技术&#xff08;Generative AI&#xff09;以其独特理念和创新模式重…

【校招VIP】前端计算机网络之UDP相关

考点介绍 UDP是一个简单的面向消息的传输层协议&#xff0c;尽管UDP提供标头和有效负载的完整性验证&#xff08;通过校验和&#xff09;&#xff0c;但它不保证向上层协议提供消息传递&#xff0c;并且UDP层在发送后不会保留UDP 消息的状态。因此&#xff0c;UDP有时被称为不可…

2023 9月最新彩虹易支付系统源码

2023 9月最新彩虹易支付系统源码 更新日志&#xff1a; 1.新增微信公众号消息提醒功能 2.重构转账付款功能&#xff0c;支持通过插件扩展 3.商户后台新增代付功能 4.后台新增付款记录列表 5.支付宝插件新增预授权支付 6.优化支付通道列表&#xff0c;支持翻页与快速复制…

【UE5 智慧城市系列】5-通过鼠标键盘控制摄像机

目标 通过鼠标WASD键控制摄像机前后左右移动&#xff0c;鼠标滚轮控制弹簧臂长度的修改&#xff0c;鼠标中键控制摄像机旋转。 步骤 1. 首先创建一个游戏模式&#xff0c;这里命名为“BP_GameMode” 2. 再创建一个玩家控制器&#xff0c;这里命名为“BP_PlayerController” …