在 o(n) 中按频率降序排列数组且无重复

sort an array in decreasing order of frequency and no duplicate, in o(n)

我有一个范围为{1....n}的整数数组,我 需要给出一个O(n)的算法 去掉重复的数字,并对数组的元素进行排序 按频率降序排列,从出现的元素开始 最.

我想到了基数排序或某种版本的计数排序,但不知道如何在 o(n) 中进行。 谢谢你的帮助

有几种方法可以做到,一种可能的解决方案:

首先,对所有元素进行计数(计数排序的第一步),并创建直方图,其中count[i] = #times i appeared。这是 O(n).

然后,在删除所有重复项后创建第二个数组(frequency, i)。这是 O(n).

最后,对新数组进行计数排序,按频率比较,输出值。这是 O(n).