一、题目描述
公司某部门软件教导团正在组织新员工每日打卡学习活动,他们开展这项学习活动已经一个月了,所以想统计下这个月优秀的打卡员工。每个员工会对应一个id,每天的打卡记录记录当天打卡员工的id集合,一共30天。
请你实现代码帮助统计出打卡次数top5的员工。假如打卡次数相同,将较早参与打卡的员工排在前面,如果开始参与打卡的时间还是一样,将id较小的员工排在前面。
注:不考虑并列的情况,按规则返回前5名员工的id即可,如果当月打卡的员工少于5个,按规则排序返回所有有打卡记录的员工id。
二、输入描述
第一行输入为新员工数量N,表示新员工编号id为0到N-1,N的范围为[1,100];
第二行输入为30个整数,表示每天打卡的员工数量,每天至少有1名员工打卡;
之后30行为每天打卡的员工id集合,id不会重复;
三、输出描述
按顺序输出打卡top5员工的id,用空格隔开。
四、补充说明
同一天打卡的员工没有时间上早晚的区别。不保证所有员工都会打卡。排名只针对有打卡记录的员工。
五、Java算法源码
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 新员工数量N
int N = Integer.valueOf(sc.nextLine());
// 每天打卡的员工数量
int[] clockArr = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
Map<Integer, int[]> map = new HashMap<>();
// 之后30行为每天打卡的员工id集合,id不会重复;
for (int i = 0; i < 30; i++) {
for (int j = 0; j < clockArr[i]; j++) {
int input = sc.nextInt();
if (input > N - 1) {
continue;
}
int[] temp = new int[2];
if (map.containsKey(input)) {
temp = map.get(input);
++temp[1];
} else {
temp[0] = i;
temp[1] = 1;
}
map.put(input, temp);
}
}
List<Map.Entry<Integer, int[]>> mapList = new ArrayList<>(map.entrySet());
mapList.sort((a, b) -> {
// 按打卡次数排序
if (b.getValue()[1] < a.getValue()[1]) {
return -1;
} else if (b.getValue()[1] == a.getValue()[1]) {
// 天数相同的第一次打卡时间靠前
if (b.getValue()[0] > a.getValue()[0]) {
return -1;
}
}
return 1;
});
StringBuilder builder = new StringBuilder();
// //小于5的取所有,大于5的只取5
for (int i = 0; i < (Math.min(mapList.size(), 5)); i++) {
builder.append(mapList.get(i).getKey()).append(" ");
}
System.out.println(builder.substring(0, builder.length() - 1));
}
六、效果展示
1、输入
11
4 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2
0 1 7 10
0 1 6 10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
6 10
7 10
2、输出
10 0 1 7 6
3、说明
员工编号范围为0-10,id为10的员工连续打卡30天,排第一,id为0,1,6,7的员工打卡都是两天,id为0,1,7的员工在第一天就打卡,比id为6的员工早,排在前面,0,1,7按id升序排序,所以输出[10,0,1,7,6]。
🏆下一篇:华为OD机试真题 Java 实现【投篮大赛】【2023Q1 100分】
🏆本文收录于,华为OD机试(JAVA)(2022&2023)
本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。