给你一个整数 n ,表示有 n 个专家从 0 到 n - 1 编号。另外给你一个下标从 0 开始的二维整数数组 meetings ,其中 meetings[i] = [xi, yi, timei] 表示专家 xi 和专家 yi 在时间 timei 要开一场会。一个专家可以同时参加 多场会议 。最后,给你一个整数 firstPerson 。

专家 0 有一个 秘密 ,最初,他在时间 0 将这个秘密分享给了专家 firstPerson 。接着,这个秘密会在每次有知晓这个秘密的专家参加会议时进行传播。更正式的表达是,每次会议,如果专家 xi 在时间 timei 时知晓这个秘密,那么他将会与专家 yi 分享这个秘密,反之亦然。

秘密共享是 瞬时发生 的。也就是说,在同一时间,一个专家不光可以接收到秘密,还能在其他会议上与其他专家分享。

在所有会议都结束之后,返回所有知晓这个秘密的专家列表。你可以按 任何顺序 返回答案。

示例 1:

输入:n = 6, meetings = [[1,2,5],[2,3,8],[1,5,10]], firstPerson = 1
输出:[0,1,2,3,5]
解释:
时间 0 ,专家 0 将秘密与专家 1 共享。
时间 5 ,专家 1 将秘密与专家 2 共享。
时间 8 ,专家 2 将秘密与专家 3 共享。
时间 10 ,专家 1 将秘密与专家 5 共享。
因此,在所有会议结束后,专家 0、1、2、3 和 5 都将知晓这个秘密。

示例 2:

输入:n = 4, meetings = [[3,1,3],[1,2,2],[0,3,3]], firstPerson = 3
输出:[0,1,3]
解释:
时间 0 ,专家 0 将秘密与专家 3 共享。
时间 2 ,专家 1 与专家 2 都不知晓这个秘密。
时间 3 ,专家 3 将秘密与专家 0 和专家 1 共享。
因此,在所有会议结束后,专家 0、1 和 3 都将知晓这个秘密。

示例 3:

输入:n = 5, meetings = [[3,4,2],[1,2,1],[2,3,1]], firstPerson = 1
输出:[0,1,2,3,4]
解释:
时间 0 ,专家 0 将秘密与专家 1 共享。
时间 1 ,专家 1 将秘密与专家 2 共享,专家 2 将秘密与专家 3 共享。
注意,专家 2 可以在收到秘密的同一时间分享此秘密。
时间 2 ,专家 3 将秘密与专家 4 共享。
因此,在所有会议结束后,专家 0、1、2、3 和 4 都将知晓这个秘密。

示例 4:

输入:n = 6, meetings = [[0,2,1],[1,3,1],[4,5,1]], firstPerson = 1
输出:[0,1,2,3]
解释:
时间 0 ,专家 0 将秘密与专家 1 共享。
时间 1 ,专家 0 将秘密与专家 2 共享,专家 1 将秘密与专家 3 共享。
因此,在所有会议结束后,专家 0、1、2 和 3 都将知晓这个秘密。

提示:

  • 2 <= n <= 105
  • 1 <= meetings.length <= 105
  • meetings[i].length == 3
  • 0 <= xi, yi <= n - 1
  • xi != yi
  • 1 <= timei <= 105
  • 1 <= firstPerson <= n - 1

code:

class Solution {public List<Integer> findAllPeople(int n, int[][] meetings, int firstPerson) {Set<Integer> set = new HashSet<>(); // 知晓秘密的集合set.add(0);set.add(firstPerson);// List<Integer> res = new ArrayList<>();// 排序可以用一行来处理 Arrays.sort(meetings, (a, b)-> a[2] - b[2]);Arrays.sort(meetings, new Comparator<int[]>(){//二维数组按照某列进行排序,你也可以采用Map@Overridepublic int compare(int[] o1, int[] o2) {//这里根据第三列进行排序return o1[2] - o2[2];}} );for (int i = 0; i < meetings.length;){boolean isExist = false; // 开会人员中是否有知情教授int j = i;for (; j < meetings.length && meetings[j][2] == meetings[i][2] ; j++){if (set.contains(meetings[j][0])){set.add(meetings[j][1]);}if (set.contains(meetings[j][1])){set.add(meetings[j][0]);}}// 需要考虑逆序 就是比如[1,2,1],[2, 3, 1]// 先通知3的话 那么按照顺序添加的话 就会漏掉1 // 所以需要逆序再查找一遍for (int k = j - 1; k >= i ; k--){  // 反着再确认一次if (set.contains(meetings[k][0])){set.add(meetings[k][1]);}if (set.contains(meetings[k][1])){set.add(meetings[k][0]);}}i = j;}return new ArrayList<Integer>(set);}
}

5941. 找出知晓秘密的所有专家相关推荐

  1. LeetCode 2092. 找出知晓秘密的所有专家(并查集)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数 n ,表示有 n 个专家从 0 到 n - 1 编号. 另外给你一个下标从 0 开始的二维整数数组 meetings ,其中 meeting ...

  2. 找出知晓秘密的所有专家(leetcode 2092)

    题目描述 给你一个整数 n ,表示有 n 个专家从 0 到 n - 1 编号.另外给你一个下标从 0 开始的二维整数数组 meetings ,其中 meetings[i] = [xi, yi, tim ...

  3. 找出知晓秘密的所有专家

    题目描述 给你一个整数 n ,表示有 n 个专家从 0 到 n - 1 编号.另外给你一个下标从 0 开始的二维整数数组 meetings ,其中 meetings[i] = [xi, yi, tim ...

  4. 警惕AI军事间谍!找出导弹基地人类用2.5天,AI只要42分钟

    安妮 千平 编译整理 量子位 出品 | 公众号 QbitAI 就在我们的头顶之上,各种卫星(包括间谍卫星)像狗仔队一样,每天都围着地球疯狂拍下数十TB的照片.这个数量可以说是泛滥了. 每个情报机构都有 ...

  5. 3个月时间,5名黑客找出苹果55个漏洞,赚了5万多美元,还写了篇博客记录全程

    大数据文摘出品 作者:刘俊寰.朱科锦.lin 昨天,翘首期待的iPhone12终于面世,不管是回归经典方框设计,还是首次推出小屏mini版,都让苹果玩家大呼过瘾. 不过,在今年这场别开生面的发布会之前 ...

  6. 亡羊补牢or防患未然?在数百套多种数据库中找出风险点(附PPT下载)

    墨墨导读:2020数据技术嘉年华于11月21日落下帷幕,大会历时两天,来自全国各地的数据领域学术精英.领袖人物.技术专家.从业者和技术爱好者相聚北京,见证了个人的快速成长.技术的迭代进步.行业的蓬勃发 ...

  7. 一招教你玩转SQL:通过找出数据的共同属性实现SQL需求

    关注我们,下载更多资源 预告:12月22日,ACOUG 联合创始人及多位核心专家将欢聚一堂,为"关键词解析2018技术圈的那些事儿"为主题的分享讨论,欢迎大家踊跃报名参会. 点击& ...

  8. 核心微生物分析_基因测序找出肠道核心微生物群

    基因测序找出肠道核心微生物群 有助于建立评价标准判断多种疾病 2016-05-19科技日报 常丽君 [字体:大 中 小] 语音播报 人类肠道中有数以万亿计的微生物,也称为肠道菌群,与多种疾病如肠炎.肥 ...

  9. 太秀了!那个在 GitHub 用文言文编程的小哥,竟从 28 万行唐诗中找出了对称矩阵

    来自量子位 下面这张图,你能看出来,这首诗妙在哪里吗? 其实,横着读是一首诗,竖着读还是这首诗! 而且,这首诗可不是乱编的,其中的诗句都来自<全唐诗>,读起来也颇有意境. 创造这个奇妙组合 ...

最新文章

  1. java中字符串后加Box_PDFBox添加多行文档
  2. 量子信息技术研究现状与未来——郭光灿
  3. Linux的MySQL不能远程访问
  4. HTML5对音频的支持
  5. 把广告投给你要几步,一文带你了解广告业务
  6. Zookeeper的ZAB协议和Leader选举过程剖析
  7. php get验证,PHP+Ajax简单get验证操作示例
  8. linux 重定位arm,Arm linxu启动过程分析(一)
  9. 波士顿动力有对手了:不怕摔倒的机器狗,怎么踹都能站起来
  10. python调用sql数据库_Python3操作SQL Server数据库(实例讲解)
  11. 数据-第14课-栈的定义及实现
  12. 持续技术开放 | SOFAStack 启用独立 Group
  13. 轻量级小型网站导航条
  14. PBRT 阅读 第一章
  15. 10分钟JAVA从入门到放弃
  16. IPv4 至 IPv6改造过渡方案
  17. weblogic 启动很慢_【转】解决weblogic启动慢和创建域慢的方法
  18. android ota升级服务,android OTA 升级包含增量升级
  19. 牛顿冷却定律,衰减因子alpha
  20. 贪婪洞窟2一直显示连接服务器失败,贪婪洞窟2登陆不了怎么办?游戏无法登陆解决方法...

热门文章

  1. 计算机硬盘一只闪烁,硬盘灯一直亮,小编教你电脑硬盘指示灯一直亮怎么办
  2. zabbix报警方式,邮件报警和微信报警。
  3. 谷歌借Google Play重返中国,这次能成功吗?
  4. 《深入理解Java虚拟机》内存管理机制 部分 读书笔记
  5. 数据结构(C语言)-串子系统(实验)
  6. 一切恍如昨日,却又截然不同...
  7. android仿微信红包动画,Android仿微信打开红包动画(逐帧动画)
  8. Parallels Desktop 16 网络初始化失败和不能连接USB设备解决方法
  9. 工程师职称评审两大阶段要明白!
  10. 微信订阅号服务器配置url如何配置,微信订阅号开发模式基本配置