在O(n)时间内以相反顺序构造java中的优先级队列

时间:2012-11-28 00:35:02

标签: java sorting priority-queue

在Java中,是否有一种简单的方法可以在O(n)时间内从无序数字集合中创建PriorityQueue,但顺序相反? PriorityQueue的构造函数都不包含集合和比较器以指定排序。我知道您可以创建一个指定比较器的PriorityQueue,然后调用addAll来添加所有无序数字。但是,我认为addAll会单独添加每个值而不是堆积无序集合,所以我不认为它会是O(n)时间。

2 个答案:

答案 0 :(得分:0)

addAll具有O(n * log(n))复杂度,所以这并不是那么糟糕。

我不知道你认为从无序数字集合中创建PriorityQueue有O(n),我认为它与addAll相同。

答案 1 :(得分:0)

解决方法是首先否定你的数字,然后在O(n)中用它们创建一个堆。之后,您只需要记住在从堆中检索它们之后否定数字。