题目详见:https://leetcode.com/problems/loud-and-rich/
思路:广度搜索。
首先初始化answer[i]=i,即为其本身,然后建立一个二维graph,graph[i]存储的是遍历richer得到的比i有钱的人。并在遍历richer的时候给answer[i]赋值为当前遍历得到的符合要求的最小quiet的j。接下来从0开始,依次循环遍历graph,每次循环先将graph[i]中的元素压入临时队列que,然后进行广度搜索,在搜索的同时进行quiet的比较。由于之前在遍历richer的时候已经得到并存储了每组的quiet最小值,所以此时的比较是当前组的quiet值与出队元素组的quiet值的比较,就不用一个一个地比。当graph[0]搜索完成后,得到的answer[0]就是最后的结果,当后续graph[i]进行搜索时,若出队元素为0时,则无需将graph[0]中的元素压入队列,只需与answer[0]比较即可。runtime:48ms,由于queue不支持遍历,set虽然可以去重,但效率比vector低很多,所以graph使用$vector
1 | class Solution { |