赞
踩
描述
有一个不为空且仅包含正整数的数组,找出其中出现频率最高的前 K 个数,时间复杂度必须在 O(n log n) 以内。
输入
一行数据包括两部分,一个正整数数组(数字间 ',' 分隔)和一个正整数 K (1 ≤ K ≤ 数组长度),数组和 K 之间有一个空格。
输出
输出包含前 K 个出现频率最高的数(出现频率相同时,较小的数在前),用 ', ' 分隔,保证升序排列。
输入样例
1,1,1,2,2,3 2
输出样例
1,2
-
- import sys
- from collections import Counter
-
- result = []
- for line in sys.stdin:
-
- data, num = line.strip().split()
- num = int(num)
- data = list(map(int,data.strip().split(',')))
- data = Counter(data)
- data = sorted(data.items(), key=lambda x: (x[1], -x[0]), reverse=True) # 多键值排序
- temp = []
- for i in range(num):
- temp.append(data[i][0])
- temp = ",".join(map(str, temp))
-
- result.append(temp)
-
- print("\n".join(map(str,result)))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。