leetcode 802. Find Eventual Safe States | 802. 找到最终的安全状态(有向图DFS)
题目
https://leetcode.com/problems/find-eventual-safe-states/
题解
用 circle 表示所有环上节点和所有能到达环的节点。
DFS,实际上每一次遍历都是像遍历链表一样,判断链表是否有环,如果有环,则将整个链放进 circle 中。
有个剪枝优化:如果 DFS 过程中,遇到了 circle 中的元素,则说明之前走过的路径也应该被放进 circle 中。
最后,返回所有不在 ciecle 中的元素即可。
class Solution {int N;public List<Integer> eventualSafeNodes(int[][] graph) {N = graph.length;Set<Integer> circle = new HashSet<>();Set<Integer> unCircle = new HashSet<>();for (int i = 0; i < N; i++) {HashSet<Integer> seen = new HashSet<>();seen.add(i);dfs(graph, circle, unCircle, seen, i);}List<Integer> result = new ArrayList<>();for (int i = 0; i < N; i++) {if (!circle.contains(i)) result.add(i);}return result;}public void dfs(int[][] graph, Set<Integer> circle, Set<Integer> unCircle, Set<Integer> seen, int i) {if (circle.contains(i)) {circle.addAll(seen);return;}if (unCircle.contains(i)) {return;}for (int j : graph[i]) {if (seen.contains(j)) {circle.addAll(seen);return;} else {seen.add(j);dfs(graph, circle, unCircle, seen, j);seen.remove(j);}}if (!circle.contains(i)) unCircle.addAll(seen);}
}
leetcode 802. Find Eventual Safe States | 802. 找到最终的安全状态(有向图DFS)相关推荐
- 802. Find Eventual Safe States [Medium]
/*** 自己的思路,DFS* 开始代码一直runtime error,看了discuss发现是因为helper里没有在进入递归前将dp[i]设为false* Runtime: 4 ms, faste ...
- LeetCode之Find Eventual Safe States(Kotlin)
问题: In a directed graph, we start at some node and every turn, walk along a directed edge of the gra ...
- LeetCode——802. 找到最终的安全状态(Find Eventual Safe States)[中等]——分析及代码(Java)
LeetCode--802. 找到最终的安全状态[Find Eventual Safe States][中等]--分析及代码[Java] 一.题目 二.分析及代码 1. 反图 + 拓扑排序 (1)思路 ...
- 【Lintcode】1015. Find Eventual Safe States
题目地址: https://www.lintcode.com/problem/find-eventual-safe-states/description 给定一个有向图,如果从某个顶点出发的任何路径都 ...
- leetcode 802. 找到最终的安全状态(Find Eventual Safe States)
目录 题目描述: 示例: 解法: 题目描述: 在有向图中, 我们从某个节点和每个转向处开始, 沿着图的有向边走. 如果我们到达的节点是终点 (即它没有连出的有向边), 我们停止. 现在, 如果我们最后 ...
- LeetCode 802. 找到最终的安全状态(逆向图+拓扑排序)
文章目录 1. 题目 2. 解题 1. 题目 在有向图中, 我们从某个节点和每个转向处开始, 沿着图的有向边走. 如果我们到达的节点是终点 (即它没有连出的有向边), 我们停止. 现在, 如果我们最后 ...
- 【leetcode】802. 找到最终的安全状态(find-eventual-safe-states)(拓扑排序)[中等]
链接 https://leetcode-cn.com/problems/find-eventual-safe-states/ 耗时 解题:23 min 题解:23 min 题意 在有向图中,以某个节点 ...
- leetcodee-802-find eventual safe states
在有向图中, 我们从某个节点和每个转向处开始, 沿着图的有向边走. 如果我们到达的节点是终点 (即它没有连出的有向边), 我们停止.现在, 如果我们最后能走到终点,那么我们的起始节点是最终安全的. 更 ...
- leetcode--802. Find Eventual Safe States题解
题目 In a directed graph, we start at some node and every turn, walk along a directed edge of the grap ...
最新文章
- Spring(ApplicationContextBeanFactory)
- 记一次对 Laravel-permission 项目的性能优化
- HTML/CSS——PC端博文尚美网页
- 并行算法设计与性能优化_CME 323: 分布式算法与优化(1)
- Lua的require使用
- python中if有几种使用方式_python 中if-else的多种简洁的写法
- java 资深工程师必备技能
- kafka日志格式和分区
- 1. Symfony 2 --- 简介
- Ghostscript的介绍
- 电脑如何设置u盘启动,u盘启动项设置方法
- python实战:爬取优美图库,将图片格式的本地存储
- html5新增标签有dfn吗,html dfn标签怎么用
- web前端不好找工作之web前端面试简历补救篇
- 用python实现相声、评书自动下载(四)
- 计算机主机突然断电有什么影响吗,断电对电脑的伤害大吗?有什么损伤?
- hibernate对oracle的文本字段按拼音排序
- [原创]使用FleaPHP框架构建简单留言本应用
- Python 处理日期与时间的全面总结!
- 【ESP32】【乐鑫发布 AI 语音麦克风阵列开发板 ESP32-Korvo】
热门文章
- POJ - 2778 DNA Sequence(AC自动机+矩阵快速幂)
- CodeForces - 1198A MP3(尺取)
- PAT (Advanced Level) 1016 Phone Bills(恶心模拟)
- 打开服务器数据库文件,如何打开服务器中的数据库文件
- android qq 登陆 简书,使用QQ第三方登录
- NOIP2017提高组比赛总结
- C++静态多态(模版模拟多态)的讨论
- cocos2d-x初探学习笔记(2)--重要概念及Test例子结构
- Python进程multiprocessing. Process()的使用
- Python 获取指定文件夹下的目录和文件