求销售经理人数最多的层级-Java集合练习题

终端部门按层级管理销售负责人,即:销售总裁直接对接公司分布在若干个国家的销售负责人,每个国家的销售负责人对接本国各大区负责人,大区负责人对接本区内各省负责人,各省负责人对接本省各市负责人等等…… 这里假设每个级别的负责人都仅向唯一的上级领导汇报。

假设共有N(N<100)位销售负责人,每人有一个两位数的代号(从 01 到 N),销售总裁的代号为01。如下样例给出了一个23人销售负责人的层级结构图:
在这里插入图片描述
给定销售负责人的层级关系数据,请统计指定负责人名下人数最多的层级是哪一层,该层有多少人?

当有多个层级的人数相同时,选择最高的那个层级。
所统计的层级是相对的,指定负责人的层级为 1,其下的层级逐层递增。

解答要求
时间限制: 1000ms, 内存限制: 256MB
输入
第一行一个整数 N 表示销售负责人总数,取值范围:[1,100)。
第二行一个整数 M (0 <= M < N)表示有下属的负责人的人数。
随后 M 行,每行给出一位负责人,格式为ID K ID[1] ID[2] … ID[K],其中 ID 是该负责人的代号,K (K > 0) 是其下属人数,后面给出的其下属们的代号。
最后一行给出待统计的指定负责人的代号ID

输出
两个数字,依次表示指定负责人名下人数最多的层级,及该层级的人数。

样例
输入样例1
23
13
21 1 23
01 4 03 02 04 05
03 3 06 07 08
06 2 12 13
13 1 21
08 2 15 16
02 2 09 10
11 2 19 20
17 1 22
05 1 11
07 1 14
09 1 17
10 1 18
01
输出样例1
[4 9]

代码实现

import java.util.*;
public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);Map<Integer, List<Integer>> relationList = new HashMap<>();int boss=scanner.nextInt();int num = scanner.nextInt();for (int i = 0; i < num; i++) {int name=scanner.nextInt();int cnt = scanner.nextInt();List<Integer> peoples = new ArrayList<>();for (int j = 0; j < cnt; j++) {int p=scanner.nextInt();peoples.add(p);}relationList.put(name, peoples);}int appointSale=scanner.nextInt();int[] results =pointSaleSurvey(boss,relationList,appointSale);String[] strResult = Arrays.stream(results).mapToObj(String::valueOf).toArray(String[]::new);System.out.print("[" + String.join(" ", strResult) + "]");}// 待实现函数,在此函数中填入答题代码private static void compute(Map<Integer,Integer> result,List<Integer> peoples,Map<Integer,List<Integer >> relationList,int floor){result.put(floor, peoples.size());List<Integer> arr = new ArrayList<>();for(int i=0;i<peoples.size();i++){if (relationList.get(peoples.get(i)) != null) {arr.addAll(relationList.get(peoples.get(i)));}}if(arr.size()>0)compute(result,arr,relationList,floor+1);}/*** @param totalSales 销售负责人总数* @param relationList 关系网络: 负责人代号+【下层负责人代号数组】* @return*/private static int[] pointSaleSurvey(int totalSales, Map<Integer, List<Integer>> relationList,int appointSale) {Map<Integer,Integer> result = new HashMap<>();result.put(1, 1);if(relationList.get(appointSale)!=null)compute(result, relationList.get(appointSale), relationList, 2);int max=1;int layer=1;for (Integer floor : result.keySet()) {if(result.get(floor)>max){max = result.get(floor);layer = floor;}}int[] res=new int[2];res[0]=layer;res[1]=max;return res;}
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部