# (1462. 课程表 IV leetcode)广搜+拓扑-------------------Java实现

2023-11-13

(1462. 课程表 IV leetcode)广搜+拓扑-------------------Java实现

题目表述

你总共需要上 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 个查询的答案。

样例

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

条件

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、广搜+拓扑,暴力解法,其实可以把数据结构由hashset变成二维数组记录,这样会省时间空间
建议再做一边。

注意点

ac代码

Java方法一:

class Solution {
    public List<Boolean> checkIfPrerequisite(int numCourses, int[][] prerequisites, int[][] queries) {
        HashSet<Integer> SourceToTarget[] = new HashSet[numCourses];
        HashSet<Integer> BeforeSource[] = new HashSet[numCourses];
        int source[] = new int[numCourses];
        List<Boolean> result = new ArrayList<>();
        for (int i=0;i<numCourses;i++) {
            SourceToTarget[i] = new HashSet<>();
            BeforeSource[i] = new HashSet<>();
        }for (int[] node:prerequisites)
        if (!SourceToTarget[node[0]].contains(node[1])) {
            source[node[1]]++;
            SourceToTarget[node[0]].add(node[1]);
            BeforeSource[node[1]].add(node[0]);
        }
        Queue<Integer> q = new LinkedList<>();
        for (int i = 0;i<numCourses;i++)
            if (source[i]==0)
                q.offer(i);
        while(!q.isEmpty())
        {
            int now = q.poll();
            for (Integer target:SourceToTarget[now])
            {
                source[target]--;
                if (source[target]==0)
                    q.offer(target);
                for (Integer s:BeforeSource[now])
                if (!BeforeSource[target].contains(s))
                    BeforeSource[target].add(s);
            }

        }
        for(int i=0;i<numCourses;i++)
        {
            for (int s:BeforeSource[i])
                System.out.print(s+" ");
            System.out.println();
        }

        //judge
        for (int i=0;i<queries.length;i++)
            if(BeforeSource[queries[i][1]].contains(queries[i][0]))
                result.add(Boolean.TRUE);
            else
                result.add(Boolean.FALSE);
        return result;
    }
}

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/squares-of-a-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

# (1462. 课程表 IV leetcode)广搜+拓扑-------------------Java实现 的相关文章

  • Java GuardedString - 用于加密的随机密钥是否存储在 Java 堆内存中?如果不是,那么密钥保存在哪里?

    Oracle 的 org identityconnectors common security GuardedString 要转换为 GuardedString 的原始数据需要由 EncryptorImpl class 随机生成的加密密钥
  • 将 CSV 文件读入 Java 作为数据库表

    我发现了很多关于使用 Java 读取 CSV 的帖子 并且他们所指向的 API 在读取 CSV 文件时都采用了面向行的方法 就像 当你得到一行时 获取每一列的值 我希望有一个更高级别的 API 比如在 Perl 中 DBI 允许您在 CSV
  • 使用比较器对对象进行排序给出空指针

    我正在尝试对包含 3 张卡的 ArrayList 进行排序 我正在用比较器来做这件事 这是否太过分了 Card getRank 返回 2 到 14 之间的整数 我完全不知道哪里出了问题 我之前已经成功完成了这个 并与我的其他代码进行了比较
  • 如何在 Groovy 中的 JSON Converter 方法中保留字母大小写?

    我正在尝试将 groovy 对象解析为 JSON 属性名称不遵循正确的驼峰式大小写形式 class Client String Name Date Birthdate 当我使用这个时 Client client new Client Nam
  • Java 弱哈希映射 - 需要根据值的弱点而不是键来删除条目

    所以JavaWeakHashMap让我们创建一个映射 如果其键变弱 则删除该映射的条目 但是我怎样才能创建一个Map 当它的条目被删除时values地图上变弱了 我想使用映射的原因是作为全局哈希表 它根据对象的 ID 跟踪对象 ID gt
  • 如何用Java创建图像

    比如说在我的程序中 我有这个paint 方法 我的愿望是创建所绘制的矩形的图像 使用 for 循环 我尝试了下面的方法 它确实给了我那些矩形 蓝色 但背景是全黑的 当我运行程序而不创建图像 仅在 JFrame 上绘制矩形时 背景为白色 我怎
  • 如何在流中收集到TreeMap中?

    我有两个Collectors groupingBy在流中 我需要收集所有信息TreeMap 我的代码 Map
  • 如何检查字符串是否具有特定模式[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 用户输入任意字符串 程序会区分该字符
  • 按对象值分组,统计后按最大对象属性设置组键

    我设法使用 Java 8 Streams API 编写了一个解决方案 该解决方案首先按对象 Route 的值对列表进行分组 然后计算每组中的对象数量 它返回一个映射 Route gt Long 这是代码 Map
  • 黄瓜与 Micronaut

    我正在尝试将 Cucumber 与 Micronaut 一起使用 但当我尝试将其与 Cucumber 一起使用时 MicronautTest 注释根本不起作用 未注入 theApple 请参阅下面的代码 如果我在没有黄瓜的情况下运行它就可以
  • GSON:自定义对象反序列化

    好吧 我编辑了这个问题 因为它不够清楚 Edit 2 更新了 JSON 文件 我在 Android 应用程序中使用 GSON 我需要解析来自服务器的 JSON 文件 而且有点太复杂了 我不想让我的对象结构太重 所以我想简化内容 所以我的对象
  • 为什么 MetaSpace 大小是已用 MetaSpace 的两倍?

    我写了一个程序来模拟MetaSpace OOM 但我发现MetaSpace Size几乎总是两倍大Used MetaSpace Why 我用标志运行我的程序 XX MaxMetaspaceSize 50m 程序抛出OOM时Used Meta
  • Java 泛型和数字类型

    我想创建一个通用方法来有效地执行此操作 class MyClass static
  • 在 Java 5 及更高版本中迭代 java.util.Map 的所有键/值对的最简单方法是什么?

    在 Java 5 及更高版本中迭代 java util Map 的所有键 值对的最简单方法是什么 假设K是您的密钥类型 并且V是你的值类型 for Map Entry
  • Java 中意外的负数

    import java util public class Prac9FibonacciNumbers public static void main String args int x new int 100 x 0 1 x 1 1 fo
  • 使用antlr4获取预处理器行并解析C代码

    我正在使用 Antlr4 来解析 C 代码 并使用以下语法来解析 链接到 C g4 https github com antlr grammars v4 blob master c C g4 上面的语法默认不提供任何解析规则来获取预处理器语
  • 在 Java 中打开现有文件并关闭它。

    是否可以在java中打开一个文件附加数据并关闭多次 例如 psuedocode class variable declaration FileWriter writer1 new FileWriter filename fn1 writer
  • 如何获取队列中的第 n 个项目?

    我的应用程序中有许多队列和优先级队列 我想轻松访问这些队列中的第 n 个项目 但没有看到使用 API 实现此目的的简单方法 我想我可以创建一个Iterator并迭代到第 n 个元素或使用toArray index 但似乎应该有一个更简单的方
  • 线程睡眠阻止我的 Swing 应用程序执行

    我的应用程序发生的事情是有道理的 但我不知道如何修复它 以下是我的应用程序功能的简要描述 计时器窗口应显示在屏幕右下角并显示实时时间 一小时后 它应该执行一些操作 我还没有决定该操作 我面临的问题是定时器 java当我刷新实时计时器的秒数时
  • javafx中的stackpane和root有什么区别?

    我正在练习javafx做饼图 以下是开发饼图的代码 如果我这样做Group并与StackPane 我发现输出没有区别 我已经评论了组部分 只是徘徊两者之间的区别 import javafx application Application i

随机推荐

  • STM32 电机教程 20 - 基于ST MC Workbench 无感FOC

    前言 磁场定向控制又称矢量控制 FOC 本质上为控制定子电流的幅度和相位 使之产生的磁场和转子的磁场正交 以产生最大的扭矩 PMSM的磁场定向控制框图如下图所示 第19讲成功实现了基于NUCLEO F103RB和X NUCLEO IHM07
  • 计算几何学

    问题描述 对于线段s1 s2 如果相交则输出 1 否则输出 0 设s1的端点为p0 p1 s2的端点为p2 p3 输入 第1行输入问题数q 接下来q行给出q个问题 各问题线段s1 s2的坐标按照以下格式给出 x p 0 x p0
  • final关键字的继承问题

    final关键字的继承问题 前言 接口中的final关键字 基本接口 内部接口 接口中使用final有什么影响 抽象类中的final关键字 普通类中的final关键字 更多一点思考 前言 虽然现在已经有很多博客验证了final关键字的继承问
  • Linux 设备树的加载与匹配

    之前学习了platform设备与总线是如何匹配的 但是在读某一驱动程序中 该设备由dts文件描述 设备的匹配与platform设有所不同 因此记录下来 1 什么是设备树 在内核源码中存在大量对板级细节信息描述的代码 但是对于内核而言 这些代
  • Java设计模式——中介者模式

    文章目录 中介者模式 Demo 中介者模式与观察者模式区别 中介者模式 中介者模式也是用来降低类类之间的耦合的 因为如果类类之间有依赖关系的话 不利于功能的拓展和维护 因为只要修改一个对象 其它关联的对象都得进行修改 如果使用中介者模式 只
  • 多用户远程桌面服务器安装,Windows 2012 R2 多用户远程连接,只需三步骤

    Windows Server 2012默认情况下 只能提供两个用户远程桌面登陆 而通过安装远程桌面服务里的远程桌面会话主机和远程桌面授权 并设置组策略和注册表 即可实现多用户远程登录 第三个用户登录提示截图 注 默认情况下一个用户只能登录一
  • 企业微信配置小程序

    准备 1 注册企业微信服务商 地址 https open work weixin qq com wwopen developer index 2 开发好的小程序 已发布的 企业微信仅可关联已在微信小程序平台审核并发布的小程序 所关联的小程序
  • vue项目封装公共方法utils

    使用了很多个公共方法的封装方式以后 发现这个是我最喜欢的 也是用起来最顺手的 1 建立公共方法utils js export default test return test test1 return test1 2 挂载在main js
  • “我们无法设置移动热点” 解决方案

    win10中要开启热点时可能会报这个错 解决方法如下 1 右击电脑选择属性 设备管理器 2 选择网络适配器 下的WiFi模块 不同电脑名称会有差异 但是名字一定包含 wireless 双击它 选择高级设置 将2 4G 和 5 2G的信道宽度
  • MATLAB三维绘图(五)高级三维绘图

    MATLAB三维绘图 五 高级三维绘图 1 colorbar查看三维绘图中的内建颜色表 示例 画三维图 clear clc close all x y meshgrid 3 2 3 3 2 3 生成网格 z x 2 x y y 2 z的表达
  • uniapp checkbox radio 样式修改

    文章目录 通过查看代码 发现 before部分是设置样式的主要属性 我们要设置的话 就要设置checkbox before的属性 其中的content表示内容 比如内部的对勾 那么我们设置的时候 比如设置disable true的时候或者c
  • Makefile中的-C和M=解析

    转载地址 https www aliyun com jiaocheng 144874 html 当make的目标为all时 C KDIR 指明跳转到内核源码目录下读取那里的Makefile M PWD 表明然后返回到当前目录继续读入 执行当
  • Wireshark抓包解释说明

    Wireshark与对应的OSI七层模型 TCP三次握手 TCP三次握手的理论知识 wireshark三次握手对应的报文情况 图中可以看到wireshark截获到了三次握手的三个数据包 第四个包才是HTTP的 这说明HTTP的确是使用TCP
  • hive解决数据倾斜之寻找大key

    参考文献 执行hive sql时 如果某个reduce任务特别慢 很可能是出现了数据倾斜 如何查找数据倾斜 第一步 在hive日志里找到当前job的日志 第二步 查看counter 点击进入 reduce input records 发现有
  • python matplotlib在图像上指定位置加框的一些心得(深度学习图像标注可视化经常面临的问题)

    matplotlib显示图像 显示图像需要配合PIL库 python中pillow库 导入matplotlib pyplot库 导入matplotlib patches库 picdir是图片的路径 直接采用Image open picdir
  • Lua co-routines

    Lua co routines up vote 7 down vote favorite 1 http stackoverflow com questions 7206411 lua co routines I m trying to ge
  • Nginx 转发匹配规则

    转载自品略图书馆 http www pinlue com article 2020 07 2104 2111056792221 html 一 正则表达式匹配 1 为区分大小写匹配 2 为不区分大小写匹配 3 和 分别为区分大小写不匹配及不区
  • 海康硬盘录像机无法通过rtsp协议连接到EasyNVR的Web页面如何处理?

    RTSP协议视频平台EasyNVR有直播版和录像版 录像版可以直接进行录像存储和回放 但是很多用户由于没有回放需求 就会使用硬盘录像机作为视频存储设备 最近有用户反馈发现自己的海康硬盘录像机无法通过rtsp连接到EasyNVR的Web页面上
  • 提取Fiddler抓包软件的抓到的数据

    Fiddler是一个著名而且免费的抓包软件 有时候需要提取响应的数据 可以先在quickexec http docs telerik com fiddler knowledgebase quickexec 命令中输入过滤的条件 比如选取所有
  • # (1462. 课程表 IV leetcode)广搜+拓扑-------------------Java实现

    1462 课程表 IV leetcode 广搜 拓扑 Java实现 题目表述 你总共需要上 numCourses 门课 课程编号依次为 0 到 numCourses 1 你会得到一个数组 prerequisite 其中 prerequisi