当前位置: 首页 > news >正文

Leetcode力扣秋招刷题路-0802

从0开始的秋招刷题路,记录下所刷每道题的题解,帮助自己回顾总结

802. 找到最终的安全状态

有一个有 n 个节点的有向图,节点按 0 到 n - 1 编号。图由一个 索引从 0 开始 的 2D 整数数组 graph表示, graph[i]是与节点 i 相邻的节点的整数数组,这意味着从节点 i 到 graph[i]中的每个节点都有一条边。

如果一个节点没有连出的有向边,则它是 终端节点 。如果没有出边,则节点为终端节点。如果从该节点开始的所有可能路径都通向 终端节点 ,则该节点为 安全节点 。

返回一个由图中所有 安全节点 组成的数组作为答案。答案数组中的元素应当按 升序 排列。

示例 1:

输入:graph = [[1,2],[2,3],[5],[0],[5],[],[]]
输出:[2,4,5,6]
解释:示意图如上。
节点 5 和节点 6 是终端节点,因为它们都没有出边。
从节点 2、4、5 和 6 开始的所有路径都指向节点 5 或 6 。

示例 2:
输入:graph = [[1,2,3,4],[1,2],[3,4],[0,4],[]]
输出:[4]
解释:
只有节点 4 是终端节点,从节点 4 开始的所有路径都通向节点 4 。

提示:
n == graph.length
1 <= n <= 1 0 4 10^4 104
0 <= graph[i].length <= n
0 <= graph[i][j] <= n - 1
graph[i] 按严格递增顺序排列。
图中可能包含自环。
图中边的数目在范围 [1, 4 ∗ 1 0 4 4 * 10^4 4104] 内。

解题思路
拓扑的解法中,所有出度为0的点是安全的,那么出到这些点的点也可以减去这条边,如果其剩下的出度为0,它也是安全的,以此类推。

搜索的时候可以标记节点的当前状态,如果他有出口,暂定为1,如果他的出口全部为安全的点,他们的和必然为0,就认定它也是安全的,否则它是不安全的。

代码

拓扑

class Solution {public List<Integer> eventualSafeNodes(int[][] graph) {int n = graph.length;int[] out = new int[n];Map<Integer, List<Integer>> edges = new HashMap<>();for(int i=0;i<n;i++)for(int j:graph[i]){List<Integer> cur = edges.getOrDefault(j, new ArrayList<>());cur.add(i);edges.put(j, cur);out[i]++;}Deque<Integer> queue = new LinkedList<>();for(int i=0;i<n;i++)if(out[i]==0)queue.add(i);List<Integer> ans = new ArrayList<>();while(queue.size()>0){int node = queue.pollFirst();ans.add(node);if(edges.containsKey(node))for(int nxt: edges.get(node)){out[nxt]--;if(out[nxt] == 0)queue.add(nxt);}}Collections.sort(ans);return ans;}
}

DFS

class Solution {int[][] graph_;int[] states;public List<Integer> eventualSafeNodes(int[][] graph) {int n = graph.length;// 每个点可能的状态: -1:点是未走过的, 0:点是安全的,1:点是走过的不确定安不安全,2:点是不安全的states = new int[n];Arrays.fill(states, -1);graph_ = graph;List<Integer> ans = new ArrayList<>();for(int i=0;i<n;i++)if(dfs(i)==0)ans.add(i);return ans;}public int dfs(int node){if(states[node] == -1){states[node] = 1;for(int nxt:graph_[node]){states[node] += dfs(nxt);if(states[node] > 1)break;}if(states[node] == 1)states[node] = 0;elsestates[node] = 2;}return states[node];}
}

DFS也可以使用纯boolean来标记

class Solution {int[][] graph_;Map<Integer,Boolean> states;public List<Integer> eventualSafeNodes(int[][] graph) {int n = graph.length;graph_ = graph;states = new HashMap<>();List<Integer> ans = new ArrayList<>();for(int i=0;i<n;i++){if(safe(i))ans.add(i);}return ans;}public boolean safe(int node){if(!states.containsKey(node)){states.put(node, false);boolean allTrue = true;for(int nxt: graph_[node])if(!safe(nxt)){allTrue = false;break;}states.put(node, allTrue);}return states.get(node);}
}

相关文章:

Leetcode力扣秋招刷题路-0802

从0开始的秋招刷题路&#xff0c;记录下所刷每道题的题解&#xff0c;帮助自己回顾总结 802. 找到最终的安全状态 有一个有 n 个节点的有向图&#xff0c;节点按 0 到 n - 1 编号。图由一个 索引从 0 开始 的 2D 整数数组 graph表示&#xff0c; graph[i]是与节点 i 相邻的节…...

编程中最难的就是命名?这几招教你快速上手

作者&#xff1a;陈立(勤仁) 你可不能像给狗狗取名字那样给类、方法、变量命名。仅仅因为它很可爱或者听上去不错。 在写代码的时候&#xff0c;你要经常想着&#xff0c;那个最终维护你代码的人可能将是一个有暴力倾向的疯子&#xff0c;并且他还知道你住在哪里。 01 为什么…...

NUXT规范及常见问题

props中不要使用Web环境才有的对象&#xff0c;服务端渲染的时候会失败 使用<Nuxt/>组件代替<router-view/>&#xff0c;使用<NuxtLink/>代替<router-link/>static目录下的资源是静态资源&#xff0c;不应该通过import或../static/img/logo.png等方式…...

2023年Q1天猫空调品牌销量排行榜

如今&#xff0c;空调的普及水平较高&#xff0c;空调行业进入存量换新为主的发展阶段。 根据鲸参谋数据分析平台的相关数据显示&#xff0c;2023年Q1在天猫平台上&#xff0c;空调的销量将近100万件&#xff0c;销售额将近30亿&#xff0c;同时&#xff0c;空调产品的产品均价…...

如何在比特币系统内创造人工生命

信息来源&#xff1a;coingeek.com 自2015年以来&#xff0c;关于比特币能否进行复杂计算以及比特币是否“图灵完备”的争论一直在持续。不幸的是&#xff0c;现在存在着一种流传甚广的谬论&#xff0c;有人说比特币并非图灵完备的&#xff0c;它不能像以太坊区块链那样进行复杂…...

除了Figma,再给你介绍10款好用的协同设计软件

组织结构越来越复杂&#xff0c;团队中的每个人都有独特的技能、经验和专业知识。我们怎样才能让团队更好地合作&#xff1f;在这种情况下&#xff0c;协同设计应运而生。 UI的未来是协同设计&#xff01;如果你想把握未来的设计趋势&#xff0c;不妨从使用高效的协同设计软件…...

信息安全复习五:数据加密标准(DES)

一、本章梗概 1.主要内容&#xff1a;分组密码、分组密码用到的关键技术和结构、对称密钥密码典型算法DES 2.思考问题&#xff1a; ①按照明文被处理的形式&#xff0c;DES属于标准的分组密码 ②根据密钥的使用数量&#xff0c;DES属于标准的对称密码 3.内容回顾&#xff1a; …...

Java ---包装类

&#xff08;一&#xff09;包装类概念 官方说法&#xff1a; Java是面向对象的语言&#xff0c;但是为了便于开发者的使用&#xff0c;Java中却沿用了C语言的基本数据类型&#xff0c;在进行基本的数据计算时&#xff0c;开发者可以直接使用基础类。但是当需要和Java其他对象…...

Baumer工业相机中偏振相机如何使用Baumer堡盟GAPI SDK来进行偏振数据的计算转换输出(C#)

项目场景 Baumer工业相机堡盟相机是一种高性能、高质量的工业相机&#xff0c;可用于各种应用场景&#xff0c;如物体检测、计数和识别、运动分析和图像处理。 Baumer的万兆网相机拥有出色的图像处理性能&#xff0c;可以实时传输高分辨率图像。此外&#xff0c;该相机还具…...

MSVC(Microsoft Visual C++) 中运行库的链接方式MD和MT的区别

问题描述 MSVC(Microsoft Visual C) 中运行库的链接方式MD和MT的区别 问题解答 在MSVC编译器中&#xff0c;运行库(Runtime Library)有两种链接方式&#xff1a;MD&#xff08;Multithread-DLL&#xff09;和MT&#xff08;Multithread&#xff09;。这两种链接方式的主要区…...

设计模式之解释器模式(C++)

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 一、解释器模式是什么&#xff1f; 解释器模式是一种行为型的软件设计模式&#xff0c;定义了一个解释器&#xff0c;来解释给定语…...

基于MATLAB编程的粒子群算法优化BP神经网络风电功率预测,基于PSO-BP的风电功率预测

目录 摘要 BP神经网络的原理 BP神经网络的定义 BP神经网络的基本结构 BP神经网络的神经元 BP神经网络的激活函数, BP神经网络的传递函数 粒子群算法的原理及步骤 基于粒子群算法改进优化BP神经网络的风电功率 matlab代码 代写下载链接:https://download.csdn.net/download/a…...

开心档之C++ 字符串

C 字符串 目录 C 字符串 C 风格字符串 实例 实例 C 中的 String 类 实例 C 提供了以下两种类型的字符串表示形式&#xff1a; C 风格字符串C 引入的 string 类类型 C 风格字符串 C 风格的字符串起源于 C 语言&#xff0c;并在 C 中继续得到支持。字符串实际上是使用 …...

Java Collection源码分析(JDk corretto 11)

文章目录 Collection 系列源码分析 (JDK Amazon corretto 11)Collection接口Iterable接口 子接口 QueueQueue的子接口 Deque双端队列 子接口ListArrayList 实现类序列化与反序列化(后续解决)获取Calss对象的方式 主要有三种&#xff1a;Arrays工具类System类 LinkedList实现类t…...

13种权重的计算方法

权重计算方法有很多种&#xff0c;不同的方法有不同的特点和适用情况。AHP层次分析法和熵值法在权重计算中属于比较常用的方法。除此之外&#xff0c;还有一些与权重计算相关的方法&#xff0c;今天一文总结了13种与权重计算相关的方法&#xff0c;大家可以对比选择使用。 一、…...

Devops和Gitops区别

一. 什么是devops DevOps 是一种开发&#xff08;Dev&#xff09;和运维&#xff08;Ops&#xff09;之间协作和沟通的文化、流程和工具的实践方法。它强调迭代、快速交付和持续集成/持续交付&#xff0c;旨在加速软件交付的速度、质量和稳定性。 DevOps 的核心目标是通过自动…...

拿下多家车企定点!4D毫米波雷达「域」系统首发出道

从1R、2R、3R到整车360感知方案&#xff0c;毫米波雷达的前装市场需求量依然保持着快速增长的态势。 高工智能汽车研究院监测数据显示&#xff0c;2022年中国市场&#xff08;不含进出口&#xff09;前装标配搭载ADAS毫米波雷达&#xff08;前向后向盲区&#xff09;交付1795.…...

【FATE联邦学习】FATE联邦学习使用GPU、指定cuda下标

问题 FATE框架1.x支持GPU训练吗&#xff1f; 寻找 先看了官网&#xff0c;搜官网&#xff0c;发现还是有的。 打开第一个后&#xff0c;里面可以用training param指定各个client的训练GPU&#xff0c;但是好像都是在large language model的。 而在文档中搜寻到的gpu&#xf…...

英文数字表达

1基数词 0 nought;zero;O 1 one 2 two 3 three 4 four 5 five 6 six 7 seven 8 eight 9 nine 10 ten 11 eleven 12 twelve 13 thirteen 14 fourteen 15 fifteen 16 sixteen 17 seventeen 18 eighteen 19 nineteen 20 twenty21 twenty-one 22 twenty-two 23 twenty-three 30 th…...

第11届蓝桥杯省赛真题剖析-2020年6月21日Scratch编程初中级组

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第125讲。 第11届蓝桥杯省赛&#xff0c;这是2020年6月21日举办的省赛Scratch考试真题&#xff0c;原定于2020年3月7日…...

蓝牙、Wi-Fi、5G、NB-IoT四大无线技术核心差异与选型指南

1. 无线通信技术全景概览&#xff1a;从身边到万物每天一睁眼&#xff0c;我们就被各种看不见的“波”包围着。手机自动连上家里的Wi-Fi&#xff0c;耳机里传来蓝牙音箱的音乐&#xff0c;出门后手机信号满格&#xff0c;甚至街边的智能路灯、家里的智能电表&#xff0c;都在悄…...

从硬件小白到Ryzen调优专家:SMUDebugTool实战进阶指南

从硬件小白到Ryzen调优专家&#xff1a;SMUDebugTool实战进阶指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gi…...

【职场】为什么越努力的人,在职场死得越惨?

为什么越努力的人&#xff0c;在职场死得越惨&#xff1f; ——没有人告诉你&#xff0c;努力本身是一种暴露。一、先说一个你亲眼见过&#xff0c;但从没想明白的现象 你身边一定有这样的人&#xff1a; 工作最拼的那个&#xff0c;最后被裁了。 加班最多的那个&#xff0c;升…...

RX65N嵌入式开发实战:从硬件设计到外设驱动与调试

1. 项目概述&#xff1a;为什么选择RX65N作为嵌入式开发的起点&#xff1f;在嵌入式开发领域&#xff0c;选择一个合适的微控制器&#xff08;MCU&#xff09;作为学习和项目实践的起点至关重要。它既要功能足够强大以覆盖主流应用场景&#xff0c;又要有完善的生态支持&#x…...

告别黑白日志!用Xshell正则高亮集,让服务器报错、成功信息一目了然

告别黑白日志&#xff01;用Xshell正则高亮集&#xff0c;让服务器报错、成功信息一目了然 在运维和开发人员的日常工作中&#xff0c;与服务器打交道是家常便饭。无论是查看系统日志、调试应用程序&#xff0c;还是执行自动化脚本&#xff0c;我们都需要面对大量的命令行输出信…...

深入浅出:拆解Xilinx ERNIC IP的硬件架构,看RoCE v2如何卸载CPU

深入浅出&#xff1a;拆解Xilinx ERNIC IP的硬件架构&#xff0c;看RoCE v2如何卸载CPU 在数据中心和高性能计算领域&#xff0c;RDMA&#xff08;远程直接内存访问&#xff09;技术正成为突破网络性能瓶颈的关键。Xilinx的ERNIC IP核作为RoCE v2协议的硬件实现&#xff0c;通过…...

NoFences桌面整理工具:5步打造高效整洁的Windows桌面

NoFences桌面整理工具&#xff1a;5步打造高效整洁的Windows桌面 【免费下载链接】NoFences &#x1f6a7; Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 还在为Windows桌面上杂乱无章的图标而烦恼吗&#xff1f;NoF…...

别再被Linux的free命令骗了!手把手教你读懂‘可用内存’available的真实含义

别再被Linux的free命令骗了&#xff01;手把手教你读懂‘可用内存’available的真实含义 每次在终端输入free -h&#xff0c;看到那一行数字跳动时&#xff0c;你是否也曾经盯着"free"列那个可怜的小数值心跳加速&#xff1f;别急&#xff0c;你可能正在经历一场Linu…...

django-tenants测试策略:单元测试、集成测试与持续集成

django-tenants测试策略&#xff1a;单元测试、集成测试与持续集成 【免费下载链接】django-tenants Django tenants using PostgreSQL Schemas 项目地址: https://gitcode.com/gh_mirrors/dj/django-tenants django-tenants是一个基于PostgreSQL模式的Django多租户解决…...

Agent 与 Chat 的区别及常见工具详解

1. 引言 在人工智能和大语言模型&#xff08;LLM&#xff09;快速发展的今天&#xff0c;我们经常听到“Chat”&#xff08;聊天机器人&#xff09;和“Agent”&#xff08;智能体&#xff09;这两个概念。虽然它们都基于大模型与用户进行交互&#xff0c;但在设计理念、能力边…...