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

(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();}//judgefor (int i=0;i<queries.length;i++)if(BeforeSource[queries[i][1]].contains(queries[i][0]))result.add(Boolean.TRUE);elseresult.add(Boolean.FALSE);return result;}
}

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

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

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

相关文章

图书管理系统 数据结构先导课暨C语言大作业复习 | JorbanS

问题描述 读取给定的图书文件book.txt中的信息&#xff08;book.txt中部分图书信息如下图所示&#xff09;&#xff0c;完成一个图书信息管理系统&#xff0c;该系统的各个功能模块要求利用菜单选项进行选择。 系统功能要求 图书浏览 读取book.txt中的文件信息并依次输出所…

【Unity程序技巧】Unity中的单例模式的运用

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

iptables 防火墙配置

文章目录 iptables 防火墙配置规则链的分类–五链处理的动作iptables 常用参数和作用iptables 防火墙配置查看规则链清空规则链设置默认规则将流入的流量丢弃允许ICMP协议流量通过删除默认策略允许所以流量通过设置将所有流入22端口的流量全部拒绝允许指定网段的22端口通过设置…

学习如何使用最强大的 JavaScript 函数

今天你将学习如何使用**最强大的** JavaScript函数。 数组归约 “Array.reduce是最强大的 JavaScript Function. 时期。 ” reduce有什么作用?为何如此强大? 这是reduce的技术定义...... Array.prototype.reduce() reduce() 方法对数组的每个元素执行(您提供的)reducer 函…

Java键盘录入案例

键盘录入 Java里面有一个类叫Scanner&#xff0c;可以接收键盘输入的数字 第一步&#xff1a;导包&#xff0c;找Scanner这个类 import java.util.Scanner; 导包必须在类定义的上边&#xff08;public class上面&#xff09; 第二步&#xff1a;创建对象&#xff0c;开始使用Sc…

selenium学习

selenium模块和爬虫之间的关联 便捷的获取网站中动态加载的数据便捷实现模拟登录 什么是selenium模块 基于浏览器自动化的一个模块 selenium使用流程&#xff1a; - 环境安装&#xff1a;pip install selenium - 下载一个浏览器的驱动程序&#xff08;谷歌浏览器&#xff…

【数据分享】2000-2022年全球范围500m分辨率类NPP-VIIRS夜间灯光数据

夜间灯光数据是我们在各项研究中经常使用的数据&#xff01;我们平时使用的夜间灯光数据主要来源于NPP/VIIRS和DMSP/OLS两种渠道&#xff0c;这两种数据由于分辨率、数据年份、传感器等不同存在不兼容的情况限制了长时序夜间灯光数据的使用&#xff0c;针对该问题我们之前分享过…

已解决 Kotlin Error: Type mismatch: inferred type is String but Int was expected

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页: &#x1f405;&#x1f43e;猫头虎的博客&#x1f390;《面试题大全专栏》 &#x1f995; 文章图文并茂&#x1f996…

linux在所有文件中查找某一个字符串

linux在所有文件中查找某一个字符串 有时候我们需要在大量文件中查找某一个字符串&#xff0c;手工一个一个打开文件查找非常耗时&#xff0c;我们可以使用 find 和 xargs 两个命令来实现查找指定字符串。 命令详解 find <directory> -type f -name "*.c" |…

【AI视野·今日Robot 机器人论文速览 第三十五期】Mon, 18 Sep 2023

AI视野今日CS.Robotics 机器人学论文速览 Mon, 18 Sep 2023 Totally 44 papers &#x1f449;上期速览✈更多精彩请移步主页 Interesting: &#x1f4da;GelSplitter, 基于近红外与可见光融合实现高精度surfaceNormal重建的触觉传感器。(from 华中科技大学) 基于分光镜的紧凑型…

centos8 install mujoco

一、ubuntu 上安装mujoco $ sudo apt-get install libglfw3 libglew2.0 libgl1-mesa-glx libosmesa6 然后pip install mujoco_py二、centos没有apt install所对应的库 2.1 尝试解决centos8上安装mujoco环境依赖问题 执行python -c "import mujoco_py"时&#xff0…

项目:点餐系统

项目扩展&#xff1a; 1.订单操作 2.用户管理&#xff08;临时用户生成用户注册与登录&#xff09; 项目有可能涉及到的面试&#xff1a; 说说你的项目 为什么要做这个项目 服务器怎么搭建的 最初我自己写了一个简单的服务器&#xff0c;但是不太稳定&#xff0c;比较粗…

nginx代理socket链接集群后,频繁断开重连

目录 一、场景二、具体表现如下三、nginx代理配置四、nginx报错信息1、nginx错误日志2、nginx访问日志 五、服务端socket链接日志六、原因七、解决 一、场景 nginx使用集群模式代理多个socket链接&#xff0c;socket链接频繁断开重连 二、具体表现如下 三、nginx代理配置 ## …

LInux - mini_shell

结合进程替换的内容&#xff0c;我们可以自己实现一个简单的shell&#xff0c;shell是命令行解释器 #include<stdio.h> #include<unistd.h> #include<sys/wait.h> #include<string.h> #include<stdlib.h> #define MAX_C 128 #define MAX_CMD 32…

ELK之Logstash启动异常:Logstash could not be started because there is already...

Logstash启动异常&#xff1a; Logstash could not be started because there is already another instance using the configured data directory. If you wish to run multiple instances, you must change the "path.data" setting. 提示我们已经有一个实例在用da…

vscode 配置网址

首先我的项目是一个面向医院的系统 我是在三个文件里都配置了网址 第一个文件&#xff1a;vue.config.js const path require(path) const webpack require(webpack) const createThemeColorReplacerPlugin require(./config/plugin.config)function resolve (dir) {retu…

Truenas Scale 安装 Official NextCloud

参考 Lawrence Systems 的 Youtube,频道有教程。 安装 安装 Collabora&#xff0c;只需要修改 账户&#xff0c;密码&#xff0c;及证书。 新增 dataset&#xff0c;名称 “NextCloud_Database”&#xff0c;其他默认新增 dataset&#xff0c;名称 “NextCloud_Data”&#…

什么是边缘计算网关?

边缘计算网关&#xff08;简称 边缘网关&#xff09;将云端功能扩展到本地的边缘设备&#xff0c;使边缘设备能够快速自主地响应本地事件&#xff0c;提供低延时、低成本、隐私安全、本地自治的本地计算服务。 同时所有服务都以 Docker 镜像方式安装&#xff0c;真正做到了跨平…

vue-grid-layout移动卡片到页面底部时页面滚动条跟随滚动

问题描述&#xff1a;默认情况下 vue-grid-layout 移动卡片到页面底部时页面滚动条并不会跟随卡片滚动。 问题解决&#xff1a; 在 grid-item中的move事件中&#xff0c;获取到当前移动的元素&#xff0c;并使用scrollIntoView方法来实现滚动条跟随。 代码如下&#xff1a; c…

安卓系列机型 另类体验第三方系统 DSU操作步骤解析 不影响主系统开启第二系统

dsu loader即 动态系统更新&#xff0c;可以在使用动态分区的安卓设备上&#xff0c;不影响原来系统的同时安装一个副系统&#xff0c;用于体验最新的原生安卓系统。可以不影响主系统的基础上体验其他gsi第三方。DSU 依赖于 Android 动态分区功能&#xff0c;并要求 GSI 作为可…