📅  最后修改于: 2023-12-03 15:11:32.977000             🧑  作者: Mango
问题描述:给定一个长度为n的数组,找出数组中所有可重复的数字出现的次数,并按出现次数从多到少排序输出。
算法分析:要解决这个问题,一种简单直接的思路是先对数组进行排序,然后再用Hash表统计每个数字的出现次数,最后按出现次数从多到少排序输出。
因为要排序,这个算法的时间复杂度至少是O(nlogn),再加上Hash表的操作,总的时间复杂度应该是O(nlogn)或O(nlogn+m),其中m是Hash表的大小。
实现代码如下(使用Python语言):
def count_duplicates(arr):
# 对数组进行排序
arr.sort()
# 统计每个数字的出现次数
count = {}
for num in arr:
if num in count:
count[num] += 1
else:
count[num] = 1
# 按出现次数从多到少排序输出
result = []
for num, cnt in sorted(count.items(), key=lambda x:x[1], reverse=True):
if cnt > 1:
result.append((num, cnt))
return result
这个算法使用了Python的内置函数sorted
来对Hash表中的键值对按值排序,具有一定的可读性和简洁性。
样例运行结果如下(假设输入数组为[1, 2, 3, 2, 1, 4, 5, 3, 3, 3]):
[(3, 4), (1, 2), (2, 2)]
这表示数字3出现了4次,数字1和2各出现了2次,三个数字都是可重复的。