leetcode851. 喧闹和富有(dfs)
在一组 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)相关推荐
- 851. 喧闹和富有-深度优先搜索
851. 喧闹和富有-深度优先搜索 有一组 n 个人作为实验对象,从 0 到 n - 1 编号,其中每个人都有不同数目的钱,以及不同程度的安静值(quietness).为了方便起见,我们将编号为 x ...
- LeetCode 807. 保持城市天际线 / 630. 课程表 III(贪心+优先队列)/ 851. 喧闹和富有(拓扑排序)
807. 保持城市天际线 2021.12.13 每日一题 题目描述 给你一座由 n x n 个街区组成的城市,每个街区都包含一座立方体建筑.给你一个下标从 0 开始的 n x n 整数矩阵 grid ...
- LeetCode 851. 喧闹和富有(拓扑排序)
文章目录 1. 题目 2. 解题 1. 题目 在一组 N 个人(编号为 0, 1, 2, ..., N-1)中,每个人都有不同数目的钱,以及不同程度的安静(quietness). 为了方便起见,我们将 ...
- Leetcode一起攻克搜索(BFS,DFS,回溯,并查集)
文章目录 BFS简介 DFS简介 回溯简介 并查集简介 DFS题目 690. 员工的重要性 1.dfs解法: 2.bfs算法 547.朋友圈 dfs解法 200.岛屿数量 dfs解法 417.太平洋大 ...
- 图Graph--拓扑排序(Topological Sorting)
文章目录 1. 拓扑排序 2. 算法实现 2.1 Kahn算法 2.2 DFS算法 2.3 时间复杂度 3. 应用 4. 类似题目练习 一个项目往往会包含很多代码源文件.编译器在编译整个项目时,需按照 ...
- 如何学好C语言--你的学渣朋友告诉你
光说不练假把式,光练不说傻把式,又练又说真把式. 真实感受,不是我不想学,是我真的不知道我哪里不会啊和得怎么做啊?本文作者当初就是这么废掉的 推荐两个练习的网站 (一)C语言网 https://www ...
- DAG_DFS_拓扑排序 闷声发大财 21.12.15
文章目录 851.喧闹和富有 暴力BFS超时 DFS 拓扑排序 851.喧闹和富有 暴力BFS超时 class Solution(object):def loudAndRich(self, riche ...
- LeetCode专题
LeetCode解题笔记 前言 复习 树 数组专题 字符串专题 动规专题 哈希表 排序 每日一题 前言 前段时间因为考试等懈怠了,重新开始做题.决定专门开一篇博客迭代记录了,不然文章散乱. 339.除 ...
- LeetCode中的那些题
目录 1. 两数之和 2. 两数相加 3. 无重复字符的最长子串 *******4.寻找两个有序数组的中位数(官方解答) : 5.最长回文子串(官方解答) 15. 三数之和 16. 最接近的三数之和 ...
最新文章
- 带有支付功能的产品如何进行测试
- etcd工作原理和CentOS 7部署指南
- aspose将datatable导出excel 比自己拼好的多 Bug少-。.net
- 部署被测软件应用和中间件_使用FlexDeploy对融合中间件应用程序进行自动化软件测试...
- C++中的文件输入/输出(6):一些有用的函数
- 2020 中国大学生计算机设计大赛
- 【测试】你的浏览器HOLD住HTML5吗?
- 心碎!一张照片找到救命恩人,没过几天却听到了他离世的消息
- 立创EDA学习笔记(3)——PCB绘制
- Tableau Desktop连接MongoDB
- [墨者学院] 日志文件分析溯源(脱裤的IP地址)
- ipad分屏功能怎么开启_英雄联盟手游设置怎么调最合适?英雄联盟手游设置方法与新手开启功能解析...
- php中asp标签怎么打开新页面,A标签新窗口打开怎么设置
- 计算机引领未来的趋势,引领未来网络发展之路,新华三提出确定性网络的第三种技术路径...
- ESP8266 NodeMcu 连接onenet 保姆级教学
- micosoft project professional 2010
- 用python轻松制作动态二维码
- 杭州服务器电销适合的系统,电销系统,可以这样用
- 比迅雷还要快的视频下载利器You-Get
- node.js后端开发