题目

有一组 n 个人作为实验对象,从 0 到 n - 1 编号,其中每个人都有不同数目的钱,以及不同程度的安静值(quietness)。为了方便起见,我们将编号为 x 的人简称为 "person x "。

给你一个数组 richer ,其中 richer[i] = [ai, bi] 表示 person ai 比 person bi 更有钱。另给你一个整数数组 quiet ,其中 quiet[i] 是 person i 的安静值。richer 中所给出的数据 逻辑自洽(也就是说,在 person x 比 person y 更有钱的同时,不会出现 person y 比 person x 更有钱的情况 )。

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

解题思路

  记忆化搜索。利用贫富关系反向建图,让穷的去找富的。然后用DFS对所有节点搜索比当前节点富的节点,当某个节点所有子节点都搜索到,就找他们的最小值,并且更新ans[nowNode]。关于剪枝,如果在开始搜索的时候或者搜索的过程中遇到已经有值的节点,直接拿值即可。
  在更新节点值的时候,懒得直接用下标作为最终值了,又quiet的值唯一,所以构建了个map映射了他们的关系,这里写好的话可以省一点内存。

代码
class Solution {private int[] map;private int[] ans;private int[] quiet;private int lengthQ;private List<Integer>[] pic;public int[] loudAndRich(int[][] richer, int[] quiet) {lengthQ = quiet.length;this.quiet = quiet;map = new int[lengthQ];ans = new int[lengthQ];pic = new List[lengthQ];for (int i = 0; i < lengthQ; i++) {pic[i] = new ArrayList<>();map[quiet[i]] = i;ans[i] = -1;}for (int[] ints : richer) {int poor = ints[1], rich = ints[0];pic[poor].add(rich);}for (int i = 0; i < lengthQ; i++) if (ans[i] == -1) dfs(i);for (int i = 0; i < lengthQ; i++) ans[i] = map[ans[i]];return ans;}private int dfs(int nowNode) {int minQuiet = quiet[nowNode];if (pic[nowNode].size() > 0) {for (Integer nextNode : pic[nowNode]) {if (ans[nextNode] != -1) minQuiet = Math.min(minQuiet, ans[nextNode]);else minQuiet = Math.min(minQuiet, dfs(nextNode));}}ans[nowNode] = minQuiet;return minQuiet;}
}

Leetcode 851 喧闹和富有相关推荐

  1. 力扣851.喧闹和富有(DFS)

    851. 喧闹和富有 class Solution {public int[] loudAndRich(int[][] richer, int[] quiet) {int n = quiet.leng ...

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

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

  3. 851. 喧闹和富有

    链接: iota - C++ Reference 题解: 力扣 class Solution { public:vector<int> loudAndRich(vector<vect ...

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

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

  5. 从喧闹与富有中搞懂搜索和拓扑

    前言 大家好我是bigsai. 今天给大家分享一个非常有趣的面试题,通过这个问题你可能会对某些情况下,搜索和拓扑有一定的认识,一个问题,既可以用搜索来处理,用记忆化搜索优化,也可以用拓扑排序来解决. ...

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

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

  7. 【LeetCode】LC1672. 最富有客户的资产总量

    算法思想 通过示例我们可以发现,二维数组中的每个一维数组形成一个单元,即客户的 资产总量 遍历二维数组中的每一个一维数组,取其和与ans比较 若ans大于和,则将和赋值给ans,反之继续循环 Java ...

  8. leetcode851. 喧闹和富有(dfs)

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

  9. leetcode算法练习 JavaScript实现

    leetcode 表格内容由spider.js从leetcode-cn.com爬取. 已做题目答案也从leetcode-cn.com中爬取并生成文件. 解题进度:已解决 140/637 - 简单 94 ...

  10. C#LeetCode刷题-深度优先搜索

    深度优先搜索篇 # 题名 刷题 通过率 难度 98 验证二叉搜索树 22.2% 中等 99 恢复二叉搜索树 45.1% 困难 100 相同的树 48.1% 简单 101 对称二叉树 42.1% 简单 ...

最新文章

  1. Matlab读取txt文本并且绘制曲线
  2. Java锁消除和锁粗化
  3. 微软亚洲研究院刘铁岩博士:迎接深度学习的“大”挑战(一)
  4. Spring 中的隔离级别
  5. 【汇编语言】除法(DIV/IDIV)
  6. centos7 源码安装goaccess
  7. css倒序循环,不借助后台和 JS ,只用 CSS 让一个列表编号倒序
  8. Spring Boot (16)---优雅的入门篇
  9. 音乐播放器App界面优秀案例,通过案例看大咖如何设计?
  10. AFNetworking下 http 改 https后遇到出现Error Domain=NSURLErrorDomain Code=-999 已取消 错误...
  11. 看动画轻松理解「Trie树」
  12. 计算机考试桌贴,考试考场桌贴打印
  13. poj 1651区间dp
  14. 如何卸载mysql server 2005_彻底的卸载SQL Server2005
  15. python 万年历代码
  16. YOLO系列目标检测算法-YOLOv2
  17. 联想服务器自动关机_联想电脑设置自动关机
  18. 如何将PDF图片转变成Word
  19. SpringBoot集成MongoDB实现两种CRUD
  20. ESP32小网关应用,嵌入式串口转以太网,支持蓝牙+wifi

热门文章

  1. 计算机毕业设计asp.net旅行社管理系统VS开发sqlserver数据库web结构c#编程计算机网页源码项目
  2. 程序员实现财务自由的5个方法
  3. 一键解决zipfile.BadZipFile: File is not a zip file
  4. Android文件存储的问题:ClassLoader和实现Parcelable接口后 详解及用途
  5. java 文件类File 文本I/O
  6. kubernetes--技术文档-真--集群搭建-三台服务器一主二从(非高可用)-三服务器位于同交换机中
  7. Renewable Energy Simulation: Buildup for NREL System Advisor Model, from GitHub to Desktop
  8. 无线蓝牙耳机应该买哪一款?发烧友推荐这几款蓝牙耳机
  9. 参数设置类毕业论文文献都有哪些?
  10. 星淘惠:“一带一路”带动对外贸易产业良性稳质发展