【发布时间】:2024-06-26 04:25:02
【问题描述】:
我有一个大小为 N 的整数数组,其中包含重复值,但我不知道值的范围。 我在这个数组中有 n/logn 不同的值,其余的都是重复的。
有没有办法以 O(n) 的时间复杂度和 O(n/logn) 的内存复杂度对其进行排序?
【问题讨论】:
-
是的,我认为您可以在这些条件下以 O(n) 对该数组进行排序。这是作业吗?
-
@Andras 是的。这对我来说是新的,我有点困惑。
-
我们一步一步来看看。排序是一个 O(m log m) 操作。你有 m = n/logn 个项目,并且 O(m * log m) = O(n/logn * log(n/logn))
-
安德拉斯,这不太对。使用 bbst,重复检查会消耗 O(n*log(n/log(n))) 时间。在我的回答中,我使用哈希表来实现重复检查的预期 O(n) 时间。