题目
公司某部门正在组织新员工每日打卡学习活动,他们开展这项学习活动已经一个月了,现在想统计下这个月优秀的打卡员工。
每个员工会对应一个 id,
每天的打卡记录记录当天打卡员工的 id 集合,一共 30 天。
请你通过代码帮助统计出打卡次数 top5 的员工:
1、假如打卡次数相同,将较早参与打卡的员工排在前面,
2、如果开始参与打卡的时间还是一样,将 id 较小的员工排在前面。
3、不考虑并列的情况,按规则返回前 5 名员工的 id 即可,4、如果当月打卡的员工少于 5 个,按规则排序返回所有有打卡记录的员工 id。
输入
1、第一行输入为新员工数量 N,表示新员工编号 id 为 0 到 N-1,N 的范围为 [1,100]
2、第二行输入为 30 个整数,表示每天打卡的员工数量,每天至少有 1 名员工打卡
3、之后 30 行为每天打卡的员工 id 集合,id 不会重复
输出
按顺序输出打卡 top5 员工的 id,用空格隔开
备注
同一天打卡的员工没有时间上早晚的区别。不保证所有员工都会打卡。
排名只针对有打卡记录的员工。
示例一
输入
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
输出
10 0 1 7 6
1
说明
员工编号范围为 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]
实现代码如下
# Time:2023 2023/6/26 9:48
# Author: Jasmay
# -*- coding: utf-8 -*-from collections import defaultdictdef solve_method(res,n):dic = defaultdict(int)dic_index = {}for i,r in enumerate(res):for s in r:dic[s] += 1if s not in dic_index:dic_index[s] = iresult = []for k,v in dic_index.items():result.append([k,dic.get(k),v])#排序result = sorted(result,key=lambda x:(-x[1],x[2],x[0]))h = []for i in result:h.append(i[0])return h[:5]if __name__ == "__main__":n = int(input().strip())nums = list(map(int,input().split()))res = []for _ in range(len(nums)):res.append(list(map(int,input().split())))print(*solve_method(res,n))