描述
有一个不为空且仅包含正整数的数组,找出其中出现频率最高的前 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)))