📅  最后修改于: 2023-12-03 15:42:21.611000             🧑  作者: Mango
在一张表格中,有n个号码,其中某些号码重复出现。请写一个程序,找到出现次数最多的前k个号码以及他们的出现次数。
这个问题可以使用哈希表来解决,先将所有号码存入哈希表中,并统计每个号码出现的次数。之后可以使用最小堆来找到前k个出现次数最多的号码和他们的出现次数。
程序流程如下:
具体实现可以参考以下代码片段:
# 将号码存入哈希表中,并统计出现次数
freq = {}
for num in nums:
if num not in freq:
freq[num] = 1
else:
freq[num] += 1
# 建立最小堆,将号码和次数插入到堆中
heap = []
for num, count in freq.items():
heapq.heappush(heap, (count, num))
if len(heap) > k:
heapq.heappop(heap)
# 输出前k个出现次数最多的号码和次数
res = []
while heap:
count, num = heapq.heappop(heap)
res.append((num, count))
res.reverse()
print(res)
这个问题虽然简单,但是可以灵活运用哈希表和最小堆来解决。在实际开发中,我们也要注重数据结构的选择,避免无意义的遍历与计算,以提高程序的效率。