文章目录

  • 1. 题目
  • 2. 解题

1. 题目

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

现在, 如果我们最后能走到终点,那么我们的起始节点是最终安全的。
更具体地说, 存在一个自然数 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] 中选取。

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

2. 解题

  • 建立逆向图
  • 拓扑排序,出度为0的入队
class Solution {public:vector<int> eventualSafeNodes(vector<vector<int>>& graph) {int n = graph.size();vector<int> outdegree(n, 0);//出度vector<int> ans;queue<int> q;for(int i = 0; i < n; i++) {outdegree[i] = graph[i].size();if(outdegree[i]==0)//出度为0的是可以到达的终点q.push(i);}vector<vector<int>> rg(n);for(int i = 0; i < n; i++){for(int j : graph[i])rg[j].push_back(i);//建立逆向图}while(!q.empty()){int id = q.front();q.pop();for(auto nt : rg[id])//逆向图{if(--outdegree[nt] == 0)q.push(nt);}}for(int i = 0; i < n; ++i)if(outdegree[i]==0)ans.push_back(i);return ans;}
};

528 ms 60.2 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

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

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

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

  2. leetcode 802. 找到最终的安全状态(Find Eventual Safe States)

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

  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 1743. 从相邻元素对还原数组(拓扑排序)

    文章目录 1. 题目 2. 解题 1. 题目 存在一个由 n 个不同元素组成的整数数组 nums ,但你已经记不清具体内容. 好在你还记得 nums 中的每一对相邻元素. 给你一个二维整数数组 adj ...

  7. LeetCode 2115. 从给定原材料中找到所有可以做出的菜(拓扑排序)

    文章目录 1. 题目 2. 解题 1. 题目 你有 n 道不同菜的信息.给你一个字符串数组 recipes 和一个二维字符串数组 ingredients . 第 i 道菜的名字为 recipes[i] ...

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

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

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

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

最新文章

  1. pcb 理论阻值、 过孔_超实用!PCB设计中过孔常用的6种处理方式
  2. 银行营业网点管理系统——Servlet包(CityAreaServlet )
  3. C# 语法练习(2): 字符转义
  4. LaTeX中用BibTex管理参考文献
  5. http抓包实战 pdf_实战 Wireshark https 抓包 2, 再抓 Moka 蹭 OurATS 的小尾巴
  6. linux CentOS7最小化安装环境静默安装Oracle11GR2数据库(配置数据库监听_09)
  7. 微信小程序时代,哪些人能赚到第一桶金
  8. nextcloud+nginx+mysql_nextcloud网盘搭建:Ubuntu18.04+Nginx+Mysql
  9. 手把手教你搭建pytorch深度学习网络
  10. LTE学习:同步信号
  11. json 插入数据_让繁琐的工作自动化——python处理JSON文件
  12. adb 清理内存_教你几招如何清理手机内存,加快运行速度!
  13. stm32采集交流电压信号_基于STM32的交流电压检测
  14. 线性代数matlab的心得体会,关于线性代数心得体会
  15. linux查找多少天前的文件,linuxfind查找大于多少天的文件,并删除之
  16. 1024程序员节,以梦为马,不负韶华,我们来聊聊IT的发展以及个人感受吧!
  17. 固本培元之一:栈和堆
  18. php微擎Goto2C解密研究
  19. 三元一次方程组例题_三元一次方程组典型例题讲解.doc
  20. 1. java缓存-多级缓存概述

热门文章

  1. golang mysql 插入_Mysql学习(一)添加一个新的用户并用golang操作Mysql
  2. JavaScript中的元素获取与操作
  3. Day08-函数(3)
  4. mysql 单标递归_MySql8 WITH RECURSIVE递归查询父子集的方法
  5. Linux中samba的权限详解,活用三种权限 理解Samba的权限控制
  6. mysql 数据检查_mysql数据一致性检查及修复
  7. appium+java(五)微信小程序自动化测试实践
  8. python BeautifulSoup 爬虫运行出现 exited with code -1073741571
  9. Android App优化之ANR详解
  10. IIS 7.0 安装SSL证书过程