问题是..:
. 设A是一个范围为{1,...,n}的整数数组。给出一个O(n)算法,它可以去掉重复的数字,并从出现最多的元素开始,按频率递减的顺序对A的元素进行排序。例如,如果A=[5,1,3,1,7,7,1,3,1,3],那么输出应该是[1,3,7,5]。
问题是,如果我们想知道从1到n的每个数字出现了多少次,我们需要运行长度为m的A(m=A.length,因为我们不知道)。
用bucket-sort ,当m = O(n)时,这是有可能的。
我觉得这个问题有问题,因为如果m = θ(n),甚至m = Ω(n)。
所以基本上我认为,如果不对m进行分类,就不可能达到O(n)。
如果有人知道解决这个问题的方法,我会很高兴。
排序是另一回事。即,用 小数点 可得 O(kn) 时间,这更接近于线性的if k 是一个常数。
主要关注的应该是如果你能以某种方式管理运行你所有的求和在 O(N) 时间,那么你仍然会获得即。O(radixSort) +