目录

  • 题目描述:
  • 示例:
  • 解法:

题目描述:

在有向图中, 我们从某个节点和每个转向处开始, 沿着图的有向边走。 如果我们到达的节点是终点 (即它没有连出的有向边), 我们停止。

现在, 如果我们最后能走到终点,那么我们的起始节点是最终安全的。 更具体地说, 存在一个自然数 K, 无论选择从哪里开始行走, 我们走了不到 K 步后必能停止在一个终点。

哪些节点最终是安全的? 结果返回一个有序的数组。

该有向图有 N 个节点,标签为 0, 1, ..., N-1, 其中 N 是 graph 的节点数. 图以以下的形式给出: graph[i] 是节点 j 的一个列表,满足 (i, j) 是图的一条有向边。

示例:

输入:graph = [[1,2],[2,3],[5],[0],[5],[],[]]
输出:[2,4,5,6]
这里是上图的示意图。

提示:

  • graph 节点数不超过 10000.
  • 图的边数不会超过 32000.
  • 每个 graph[i] 被排序为不同的整数列表, 在区间 [0, graph.length - 1] 中选取。

解法:

class Solution {
public:vector<int> eventualSafeNodes(vector<vector<int>>& graph) {vector<int> res;int sz = graph.size();vector<int> degree(sz, 0);unordered_map<int, vector<int>> redge;for(int i=0; i<sz; i++){redge[i] = {};}stack<int> leaf;for(int i=0; i<sz; i++){degree[i] += graph[i].size();if(degree[i] == 0){leaf.push(i);}for(int val : graph[i]){redge[val].push_back(i);}}while(!leaf.empty()){int node = leaf.top();leaf.pop();res.push_back(node);for(int nxt : redge[node]){degree[nxt]--;if(degree[nxt] == 0){leaf.push(nxt);}}}sort(res.begin(), res.end());return res;}
};

转载于:https://www.cnblogs.com/zhanzq/p/10916472.html

leetcode 802. 找到最终的安全状态(Find Eventual Safe States)相关推荐

  1. LeetCode——802. 找到最终的安全状态(Find Eventual Safe States)[中等]——分析及代码(Java)

    LeetCode--802. 找到最终的安全状态[Find Eventual Safe States][中等]--分析及代码[Java] 一.题目 二.分析及代码 1. 反图 + 拓扑排序 (1)思路 ...

  2. LeetCode 802. 找到最终的安全状态(逆向图+拓扑排序)

    文章目录 1. 题目 2. 解题 1. 题目 在有向图中, 我们从某个节点和每个转向处开始, 沿着图的有向边走. 如果我们到达的节点是终点 (即它没有连出的有向边), 我们停止. 现在, 如果我们最后 ...

  3. leetcode 802. Find Eventual Safe States | 802. 找到最终的安全状态(有向图DFS)

    题目 https://leetcode.com/problems/find-eventual-safe-states/ 题解 用 circle 表示所有环上节点和所有能到达环的节点. DFS,实际上每 ...

  4. 【leetcode】802. 找到最终的安全状态(find-eventual-safe-states)(拓扑排序)[中等]

    链接 https://leetcode-cn.com/problems/find-eventual-safe-states/ 耗时 解题:23 min 题解:23 min 题意 在有向图中,以某个节点 ...

  5. 802. 找到最终的安全状态

    在有向图中,以某个节点为起始节点,从该点出发,每一步沿着图中的一条有向边行走.如果到达的节点是终点(即它没有连出的有向边),则停止. 对于一个起始节点,如果从该节点出发,无论每一步选择沿哪条有向边行走 ...

  6. 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 ...

  7. 802. Find Eventual Safe States [Medium]

    /*** 自己的思路,DFS* 开始代码一直runtime error,看了discuss发现是因为helper里没有在进入递归前将dp[i]设为false* Runtime: 4 ms, faste ...

  8. leetcode 658. 找到 K 个最接近的元素

    leetcode 658. 找到 K 个最接近的元素 题目描述: 给定一个排序好的数组 arr ,两个整数 k 和 x ,从数组中找到最靠近 x(两数之差最小)的 k 个数.返回的结果必须要是按升序排 ...

  9. 10 | 递归:如何用三行代码找到“最终推荐人”?

    什么是递归? 递归是一种应用非常广泛的算法(或者编程技巧).很多数据结构和算法的编码实现都要用到递归,比如 DFS 深度优先搜索.前中后序二叉树遍历等等. 去的过程叫"递",回来的 ...

最新文章

  1. vue分页tbale小荔枝
  2. java基础第十一篇之Date、Math、自动装箱和拆箱
  3. 马走日poj java超时_简单搜索poj 2243(水
  4. SAP Cloud for Customer的inscreen_dataflow处理方式
  5. 反射调用 java bean的set和get方法
  6. php 随机数 名称,php – 从标题更改为随机数
  7. access建立两个字段唯一索引_面试官:谈谈你对mysql索引的认识?
  8. Android studio 报错Failed to open zip file解决方法
  9. 30个非常有趣的404错误页面设计欣赏
  10. 解决kettle部署在linux中界面变成英文的问题
  11. docker redis
  12. day29 | 黑马程序员Java全程笔记 | 第二阶段MySQL高级事务-索引-视图-触发器-存储过程
  13. 近年来,小样本学习取得重大进展了吗?
  14. Photoshop(4)做海报的心得
  15. 实现自动轮播图(html+js)
  16. strus2常用标签自己一点小小的应用
  17. 美国-机械故障预防技术学会MFPT
  18. 【原创】-eclipse下连Hadoop报java.lang.OutOfMemoryError: Java heap space的解决办法
  19. 中职计算机英语教学计划,中职英语基础模块1教学计划.docx
  20. 4_树莓派机载计算机的机器视觉样例教程——无名创新

热门文章

  1. 12岁上大学,23岁获博士学位,这位天才科学家正式加盟清华
  2. 金融时序预测中的深度学习方法综述!
  3. android 电视遥控 编程,Android编程调用红外线遥控功能示例
  4. Python中的相对文件路径的调用
  5. VGG和GoogLeNet inception
  6. 复练--软考高级-综合布线部分
  7. android tv nugat,GitHub - GongXunYoung/Android-tv-widget: Android tv,盒子,投影仪 控件
  8. php转移单引号,php如何转义单引号
  9. idea 编译 maven 项目
  10. 渗透测试入门24之渗透测试参考书、课程、工具、认证