在一组 N 个人(编号为 0, 1, 2, …, N-1)中,每个人都有不同数目的钱,以及不同程度的安静(quietness)。

为了方便起见,我们将编号为 x 的人简称为 "person x "。

如果能够肯定 person x 比 person y 更有钱的话,我们会说 richer[i] = [x, y] 。注意 richer 可能只是有效观察的一个子集。

另外,如果 person x 的安静程度为 q ,我们会说 quiet[x] = q 。

现在,返回答案 answer ,其中 answer[x] = y 的前提是,在所有拥有的钱不少于 person x 的人中,person y 是最安静的人(也就是安静值 quiet[y] 最小的人)。

示例:

输入:richer = [[1,0],[2,1],[3,1],[3,7],[4,3],[5,3],[6,3]], quiet = [3,2,5,4,6,1,7,0]
输出:[5,5,2,5,4,5,6,7]
解释:
answer[0] = 5,
person 5 比 person 3 有更多的钱,person 3 比 person 1 有更多的钱,person 1 比 person 0 有更多的钱。
唯一较为安静(有较低的安静值 quiet[x])的人是 person 7,
但是目前还不清楚他是否比 person 0 更有钱。

answer[7] = 7,
在所有拥有的钱肯定不少于 person 7 的人中(这可能包括 person 3,4,5,6 以及 7),
最安静(有较低安静值 quiet[x])的人是 person 7。

其他的答案也可以用类似的推理来解释。

代码

class Solution {int[] res;public int[] loudAndRich(int[][] richer, int[] quiet) {Map<Integer,List<Integer>> map=new HashMap<>();int n=quiet.length;res=new int[n];Arrays.fill(res,n);for(int i=0;i<n;i++)map.put(i,new ArrayList<>());for(int[] r:richer)//邻接表map.get(r[1]).add(r[0]);for(int i=0;i<n;i++){res[i]=loud(richer,quiet,map,i,i);}return res;}private int loud(int[][] richer, int[] quiet, Map<Integer, List<Integer>> map, int cur,int min) {   if(res[cur]!=quiet.length) return res[cur] ;//已经搜索过了,直接返回结果int cMin=cur;//当前子节点的最小值for(int next:map.get(cur)){int n=loud(richer, quiet, map, next,cMin);if(quiet[n]<quiet[cMin]) cMin=n;}res[cur]=cMin;if(quiet[cMin]<quiet[min])//和父节点搜索得出的最小值比较min=cMin;return min;}
}

leetcode851. 喧闹和富有(dfs)相关推荐

  1. 851. 喧闹和富有-深度优先搜索

    851. 喧闹和富有-深度优先搜索 有一组 n 个人作为实验对象,从 0 到 n - 1 编号,其中每个人都有不同数目的钱,以及不同程度的安静值(quietness).为了方便起见,我们将编号为 x ...

  2. LeetCode 807. 保持城市天际线 / 630. 课程表 III(贪心+优先队列)/ 851. 喧闹和富有(拓扑排序)

    807. 保持城市天际线 2021.12.13 每日一题 题目描述 给你一座由 n x n 个街区组成的城市,每个街区都包含一座立方体建筑.给你一个下标从 0 开始的 n x n 整数矩阵 grid ...

  3. LeetCode 851. 喧闹和富有(拓扑排序)

    文章目录 1. 题目 2. 解题 1. 题目 在一组 N 个人(编号为 0, 1, 2, ..., N-1)中,每个人都有不同数目的钱,以及不同程度的安静(quietness). 为了方便起见,我们将 ...

  4. Leetcode一起攻克搜索(BFS,DFS,回溯,并查集)

    文章目录 BFS简介 DFS简介 回溯简介 并查集简介 DFS题目 690. 员工的重要性 1.dfs解法: 2.bfs算法 547.朋友圈 dfs解法 200.岛屿数量 dfs解法 417.太平洋大 ...

  5. 图Graph--拓扑排序(Topological Sorting)

    文章目录 1. 拓扑排序 2. 算法实现 2.1 Kahn算法 2.2 DFS算法 2.3 时间复杂度 3. 应用 4. 类似题目练习 一个项目往往会包含很多代码源文件.编译器在编译整个项目时,需按照 ...

  6. 如何学好C语言--你的学渣朋友告诉你

    光说不练假把式,光练不说傻把式,又练又说真把式. 真实感受,不是我不想学,是我真的不知道我哪里不会啊和得怎么做啊?本文作者当初就是这么废掉的 推荐两个练习的网站 (一)C语言网 https://www ...

  7. DAG_DFS_拓扑排序 闷声发大财 21.12.15

    文章目录 851.喧闹和富有 暴力BFS超时 DFS 拓扑排序 851.喧闹和富有 暴力BFS超时 class Solution(object):def loudAndRich(self, riche ...

  8. LeetCode专题

    LeetCode解题笔记 前言 复习 树 数组专题 字符串专题 动规专题 哈希表 排序 每日一题 前言 前段时间因为考试等懈怠了,重新开始做题.决定专门开一篇博客迭代记录了,不然文章散乱. 339.除 ...

  9. LeetCode中的那些题

    目录 1. 两数之和 2. 两数相加 3. 无重复字符的最长子串 *******4.寻找两个有序数组的中位数(官方解答) : 5.最长回文子串(官方解答) 15. 三数之和 16. 最接近的三数之和 ...

最新文章

  1. 带有支付功能的产品如何进行测试
  2. etcd工作原理和CentOS 7部署指南
  3. aspose将datatable导出excel 比自己拼好的多 Bug少-。.net
  4. 部署被测软件应用和中间件_使用FlexDeploy对融合中间件应用程序进行自动化软件测试...
  5. C++中的文件输入/输出(6):一些有用的函数
  6. 2020 中国大学生计算机设计大赛
  7. 【测试】你的浏览器HOLD住HTML5吗?
  8. 心碎!一张照片找到救命恩人,没过几天却听到了他离世的消息
  9. 立创EDA学习笔记(3)——PCB绘制
  10. Tableau Desktop连接MongoDB
  11. [墨者学院] 日志文件分析溯源(脱裤的IP地址)
  12. ipad分屏功能怎么开启_英雄联盟手游设置怎么调最合适?英雄联盟手游设置方法与新手开启功能解析...
  13. php中asp标签怎么打开新页面,A标签新窗口打开怎么设置
  14. 计算机引领未来的趋势,引领未来网络发展之路,新华三提出确定性网络的第三种技术路径...
  15. ESP8266 NodeMcu 连接onenet 保姆级教学
  16. micosoft project professional 2010
  17. 用python轻松制作动态二维码
  18. 杭州服务器电销适合的系统,电销系统,可以这样用
  19. 比迅雷还要快的视频下载利器You-Get
  20. node.js后端开发

热门文章

  1. sigaction()函数
  2. gcc的警告提示信息
  3. DataTable不能通过已删除的行访问该行的信息解决方法
  4. MlLib--逻辑回归笔记
  5. ORACLE事务提交
  6. 大型网站中的验证码解决方案
  7. RRDTool学习资料备忘
  8. 一个DotNetNuke 皮肤设计参考网站
  9. 使用了JDK自带的jconsole查看Tomcat运行情况
  10. docker启动顺序