华为OD机考2025A卷 - 找到比自己强的人数 (Java & Python& JS & C++ & C )

最新华为OD机试

真题目录:点击查看目录
华为OD面试真题精选:点击立即查看

题目描述

给定数组[[2,1],[3 2]],每组表示师徒关系,第一个元素是第二个元素的老师,数字代表排名,现在找出比自己强的徒弟。

输入描述

输出描述

示例1

输入

[[2,1],[3,2]]

输出

[0,1,2]

说明

输入:

第一行数据[2,1]表示排名第 2 的员工是排名第 1 员工的导师,后面的数据以此类推。

输出:

第一个元素 0 表示成绩排名第一的导师,没有徒弟考试超过他;
第二个元素 1 表示成绩排名第二的导师,有 1 个徒弟成绩超过他
第三个元素 2 表示成绩排名第三的导师,有 2 个徒弟成绩超过他

解题思路

  1. 构建师徒关系图

    • 使用一个哈希表来存储每位导师对应的徒弟列表,以便后续快速查询各导师的徒弟信息。
    • 同时,使用一个集合来记录所有相关的排名。
  2. 递归查找比自己强的徒弟

    • 我们需要对每个导师递归地查找其所有的徒弟及其徒弟的徒弟,直到遍历到底层。对每每位导师,定义一个递归方法来统计其所有比其强的徒弟:
      • 如果当前处理的徒弟的排名高于(数值小于)源导师的排名,则把它加入到统计集合中。
      • 如果遇到循环依赖(徒弟与导师相同),则中断递归。
      • 为了避免重复计算(避免同一徒弟多次被统计),使用一个集合来记录已经统计过的比当前导师强的徒弟的排名。

Java

import java.util.*;

public 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

算法大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值