最新华为OD机试
题目描述
给定数组[[2,1],[3 2]],每组表示师徒关系,第一个元素是第二个元素的老师,数字代表排名,现在找出比自己强的徒弟。
输入描述
无
输出描述
无
示例1
输入
[[2,1],[3,2]]
输出
[0,1,2]
说明
输入:
第一行数据[2,1]表示排名第 2 的员工是排名第 1 员工的导师,后面的数据以此类推。
输出:
第一个元素 0 表示成绩排名第一的导师,没有徒弟考试超过他;
第二个元素 1 表示成绩排名第二的导师,有 1 个徒弟成绩超过他
第三个元素 2 表示成绩排名第三的导师,有 2 个徒弟成绩超过他
解题思路
-
构建师徒关系图:
- 使用一个哈希表来存储每位导师对应的徒弟列表,以便后续快速查询各导师的徒弟信息。
- 同时,使用一个集合来记录所有相关的排名。
-
递归查找比自己强的徒弟:
- 我们需要对每个导师递归地查找其所有的徒弟及其徒弟的徒弟,直到遍历到底层。对每每位导师,定义一个递归方法来统计其所有比其强的徒弟:
- 如果当前处理的徒弟的排名高于(数值小于)源导师的排名,则把它加入到统计集合中。
- 如果遇到循环依赖(徒弟与导师相同),则中断递归。
- 为了避免重复计算(避免同一徒弟多次被统计),使用一个集合来记录已经统计过的比当前导师强的徒弟的排名。
- 我们需要对每个导师递归地查找其所有的徒弟及其徒弟的徒弟,直到遍历到底层。对每每位导师,定义一个递归方法来统计其所有比其强的徒弟:
Java
import java.util.*;
public