O(n)

问题描述 投票:0回答:1

问题是..:

. 设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)。

如果有人知道解决这个问题的方法,我会很高兴。

sorting time time-complexity complexity-theory
1个回答
0
投票

排序是另一回事。即,用 小数点 可得 O(kn) 时间,这更接近于线性的if k 是一个常数。

主要关注的应该是如果你能以某种方式管理运行你所有的求和在 O(N) 时间,那么你仍然会获得即。O(radixSort) +

© www.soinside.com 2019 - 2024. All rights reserved.