【LeetCode】851. Loud and Rich 解题报告(Python)

标签(空格分隔): LeetCode

作者: 负雪明烛
id: fuxuemingzhu
个人博客: http://fuxuemingzhu.cn/


题目地址:https://leetcode.com/problems/loud-and-rich/description/

题目描述:

In a group of N people (labelled 0, 1, 2, …, N-1), each person has different amounts of money, and different levels of quietness.

For convenience, we’ll call the person with label x, simply “person x”.

We’ll say that richer[i] = [x, y] if person x definitely has more money than person y. Note that richer may only be a subset of valid observations.

Also, we’ll say quiet[x] = q if person x has quietness q.

Now, return answer, where answer[x] = y if y is the least quiet person (that is, the person y with the smallest value of quiet[y]), among all people who definitely have equal to or more money than person x.

Example 1:

  1. Input: richer = [[1,0],[2,1],[3,1],[3,7],[4,3],[5,3],[6,3]], quiet = [3,2,5,4,6,1,7,0]
  2. Output: [5,5,2,5,4,5,6,7]
  3. Explanation:
  4. answer[0] = 5.
  5. Person 5 has more money than 3, which has more money than 1, which has more money than 0.
  6. The only person who is quieter (has lower quiet[x]) is person 7, but
  7. it isn't clear if they have more money than person 0.
  8. answer[7] = 7.
  9. Among all people that definitely have equal to or more money than person 7
  10. (which could be persons 3, 4, 5, 6, or 7), the person who is the quietest (has lower quiet[x])
  11. is person 7.
  12. The other answers can be filled out with similar reasoning.

Note:

  1. 1 <= quiet.length = N <= 500
  2. 0 <= quiet[i] < N, all quiet[i] are different.
  3. 0 <= richer.length <= N * (N-1) / 2
  4. 0 <= richer[i][j] < N
  5. richer[i][0] != richer[i][1]
  6. richer[i]’s are all different.
  7. The observations in richer are all logically consistent.

题目大意

这个题目理解起来很困难。

题目给出了有钱人之间的对比,在richer中第一个数字的人比第二个数字的人有钱。quiet值代表每个人的安静指数,数字越大代表越吵。

我们要做的是,找出对于每个人,比他有钱的人还比他安静是谁。

真不知道这个题目设定有啥意义。

解题方法

因为这个题设计到一连串的比较,这种题一般都是使用dfs解决。这个题先使用dict保存比每个人有钱的人list。

然后对每个人都去遍历比他有钱的人,对于比他有钱的人继续遍历比他更有钱的人……

下面的代码,

res[i]代表比i有钱还比i安静的人的序号。
dfs的含义是找出比i有钱还比i安静的人的序号。

代码如下:

  1. class Solution:
  2. def loudAndRich(self, richer, quiet):
  3. """
  4. :type richer: List[List[int]]
  5. :type quiet: List[int]
  6. :rtype: List[int]
  7. """
  8. m = collections.defaultdict(list)
  9. for i, j in richer:
  10. m[j].append(i)
  11. res = [-1] * len(quiet)
  12. def dfs(i):
  13. if res[i] > 0: return res[i]
  14. res[i] = i
  15. for j in m[i]:
  16. if quiet[res[i]] > quiet[dfs(j)]:
  17. res[i] = res[j]
  18. return res[i]
  19. for i in range(len(quiet)):
  20. dfs(i)
  21. return res

参考资料:

https://leetcode.com/problems/loud-and-rich/discuss/137918/C++JavaPython-Concise-DFS

日期

2018 年 9 月 8 日 ———— 美好的周末,从刷题开始

【LeetCode】851. Loud and Rich 解题报告(Python)的更多相关文章

  1. 【LeetCode】62. Unique Paths 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址:https://leetcode.com/problems/unique-pa ...

  2. 【LeetCode】376. Wiggle Subsequence 解题报告(Python)

    [LeetCode]376. Wiggle Subsequence 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.c ...

  3. 【LeetCode】649. Dota2 Senate 解题报告(Python)

    [LeetCode]649. Dota2 Senate 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地 ...

  4. 【LeetCode】911. Online Election 解题报告(Python)

    [LeetCode]911. Online Election 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ ...

  5. 【LeetCode】886. Possible Bipartition 解题报告(Python)

    [LeetCode]886. Possible Bipartition 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu ...

  6. 【LeetCode】36. Valid Sudoku 解题报告(Python)

    [LeetCode]36. Valid Sudoku 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址 ...

  7. 【LeetCode】870. Advantage Shuffle 解题报告(Python)

    [LeetCode]870. Advantage Shuffle 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn ...

  8. 【LeetCode】593. Valid Square 解题报告(Python)

    [LeetCode]593. Valid Square 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地 ...

  9. 【LeetCode】435. Non-overlapping Intervals 解题报告(Python)

    [LeetCode]435. Non-overlapping Intervals 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemi ...

随机推荐

  1. 动态生成多个选择项【c#】

    <asp:CheckBoxList ID="cbxLabelList" runat="server" RepeatColumns="10&quo ...

  2. Kafka 集群安装部署

    2.1 安装部署 2.1.1 集群规划 192.168.1.102 192.168.1.103 192.168.1.104 zookeeper zookeeper zookeeper kafka ka ...

  3. 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(六)-FatFs使用的思路介绍

    [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 [STM3 ...

  4. 优化if else嵌套代码

    写在前面 不知大家有没遇到过像"横放着的金字塔"一样的if else嵌套: if (true) { if (true) { if (true) { if (true) { if ( ...

  5. mybatis-plus条件构造用is开头的Boolean类型字段时遇到的问题

    is打头的Boolean字段导致的代码生成器与lambda构造器的冲突 https://gitee.com/baomidou/mybatis-plus/issues/I171DD?_from=gite ...

  6. android 跳到应用市场给软件评分

    1 String packetName = this.getPackageName(); 2 Uri uri = Uri.parse("market://details?id=" ...

  7. oracle(创建数据库对象)

    1 --创建数据库 2 --1.SYSDBA系统权限 3 startup:--启动数据库. 4 shutdown:--关闭数据库. 5 alter database[mount]|[open]|[ba ...

  8. Function overloading and return type

    In C++ and Java, functions can not be overloaded if they differ only in the return type. For example ...

  9. 【Linux】【Database】【MySQL】使用percona搭建高可用的MySQL数据库

    1. 简介 1.1. 官方文档: 数据库架构:https://docs.openstack.org/ha-guide/shared-database.html 1.2. 本次使用的的是Percona ...

  10. 实现将rsyslog将日志记录与MySQL中

    准备两个节点 node3:  rsyslog node2:   数据库 准备相应的包 [root@node3 php-fpm.d]#yum install rsyslog-mysql 将数据拷贝到数据 ...