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

有一组 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] 最小的人)。

示例 1:

输入: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。
其他的答案也可以用类似的推理来解释。

示例 2:

输入:richer = [], quiet = [0]
输出:[0]

解题代码如下:

/*** Note: The returned array must be malloced, assume caller calls free().*/void dfs(int** richer, int richerSize, int* quiet, int quietSize,int index,int *q_value,int *po,int *answer,int *now_value){if(quiet[index]<*q_value){*(q_value)=quiet[index];*po=index;}if(quiet[index]<*now_value){*(now_value)=quiet[index];}for(int j=0;j<richerSize;j++){if(richer[j][1]==index){if(quiet[richer[j][0]]< *(now_value)){*(now_value)=quiet[richer[j][0]];}//     printf("++%d ",quiet[richer[j][0]]);if(answer[richer[j][0]]!=-1){if(quiet[answer[richer[j][0]]]<=*q_value){*(q_value)=quiet[answer[richer[j][0]]];*po=answer[richer[j][0]];}}else{int pre=*q_value;int *now_value=(int *)malloc(sizeof(int ));*now_value=quiet[richer[j][0]];//printf("|| %d||",richer[j][0]);dfs(richer,richerSize,quiet,quietSize,richer[j][0],q_value,po,answer,now_value);if(*now_value<quiet[richer[j][0]]){answer[richer[j][0]]=*po;}else{answer[richer[j][0]]=richer[j][0];}}}}}
int* loudAndRich(int** richer, int richerSize, int* richerColSize, int* quiet, int quietSize, int* returnSize){int* answer=(int *)malloc(sizeof(int)*quietSize);int *q_value=(int *)malloc(sizeof(int ));int *po=(int *)malloc(sizeof(int ));for(int i=0;i<quietSize;i++){answer[i]=-1;}for(int i=0;i<quietSize;i++){if(answer[i]==-1){answer[i]=i;*po=i;//   printf("--");*q_value=quiet[i];for(int j=0;j<richerSize;j++){if(richer[j][1]==i){if(answer[richer[j][0]]!=-1&&quiet[answer[i]]<quiet[answer[richer[j][0]]]){answer[i]=answer[richer[j][0]];}else{dfs(richer,richerSize,quiet,quietSize,richer[j][0],q_value,po,answer,q_value);}//  printf("%d ",richer[j][0]);}}answer[i]=*po;}}*returnSize=quietSize;
return answer;}

851. 喧闹和富有-深度优先搜索相关推荐

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

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

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

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

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

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

  4. [C] 深度优先搜索解决连通块/染色问题——求岛的个数

    本文介绍用DFS解决连通块个数问题 有关dfs的介绍见另外一篇:不撞南墙不回头--深度优先搜索 例题 宝岛探险 题目描述 一个小岛由一个主岛和一些复附属岛屿组成,该岛使用一个二维矩阵表示,其中数字表示 ...

  5. 深度优先搜索_0基础学算法 搜索篇第一讲 深度优先搜索

    0基础学算法 搜索篇第一讲 深度优先搜索 相信绝大多数人对于深度优先搜索和广度优先搜索是不会特别陌生的,如果我这样说似乎你没听说过,那如果我说dfs和bfs呢?先不说是否学习过它们,至少它们的大名应该 ...

  6. leetcode dfs_深度优先搜索:具有6个Leetcode示例的DFS图遍历指南

    leetcode dfs Have you ever solved a real-life maze? The approach that most of us take while solving ...

  7. 【ACM】杭电OJ 1241(深度优先搜索小结)

    题目链接:杭电OJ 1241 深度优先搜索问题 深度优先搜索是搜索的手段之一.它从某个状态开始,不断地转移状态直到无法转移,然后回退到前一步的状态,继续转移到其他状态,如此不断重复,直至找到最终的解. ...

  8. matlab bfs函数,matlab练习程序(广度优先搜索BFS、深度优先搜索DFS)

    如此经典的算法竟一直没有单独的实现过,真是遗憾啊. 广度优先搜索在过去实现的二值图像连通区域标记和prim最小生成树算法时已经无意识的用到了,深度优先搜索倒是没用过. 这次单独的将两个算法实现出来,因 ...

  9. c++输出方块_C/C++编程笔记:DFS 深度优先搜索的基本思想,含实例讲解

    采用搜索算法解决问题时,需要构造一个表明状态特征和不同状态之间关系的数据结构,这种数据结构称为结点.不同的问题需要用不同的数据结构描述. 根据搜索问题所给定的条件,从一个结点出发,可以生成一个或多个新 ...

最新文章

  1. 20步打造最安全的Nginx Web服务器
  2. 验证组播的TTL阀值
  3. 手机1像素线粗_关于移动端开发 1px 线的一些理解和解决办法
  4. 第三章 染色动力学理论单元测试
  5. 用户身份与文件的权限(普通权限、特殊权限、隐藏权限和文件控制列表ACL)
  6. PostgreSQL 12系统表(5)pg_index
  7. mysql增删改查不区分大小写吗_MySQL的增删改查语句以及数据库设计的三大范式...
  8. 读书笔记《Java开发技术-在架构中体验设计模式和架构之美》
  9. L1-065 嫑废话上代码 (5 分)-PAT 团体程序设计天梯赛 GPLT
  10. lvgl 笔记(3)-中文字库的制作和使用(windows模拟和esp32)
  11. 民企信息化建设个人经历(一)
  12. 2021年人工智能学习路线图分享
  13. 二次元壁纸 | 心情烦躁?换上喜欢的手机壁纸
  14. 维恩图是什么?如何使用维恩图?
  15. 小总结:git的使用
  16. 云主机创建网络失败:Unable to create the network. No tenant network is available for allocation.
  17. 如何用电脑画平面坐标图_如何在WORD或者EXERL上画坐标图?
  18. 等待时间 single-task message
  19. 什么是稀疏向量(向量的稀疏表示)
  20. 前端?请叫我游戏开发

热门文章

  1. cocoscreator2.4 jsb自动绑定
  2. Java学习的三个终极问题及学习路线规划
  3. 网站URL缩短器短域名生成源码
  4. 能在一台电脑上装好系统,然后把硬盘换到另外一台电脑上用吗?
  5. 检测之VOC转YOLO
  6. 基础理论知识复习(下)
  7. iphone连接pc蓝牙_iPhone通过USB电缆使用Windows PC的网络连接到Internet
  8. 免杀Backdoor-factory
  9. 谈谈NITE 2与OpenCV结合的第一个程序
  10. C++面向对象-26-虚析构和纯虚析构