Java: 有没有办法使用 PriorityQueue 从 O(n) 的数组构造最大堆?
Java: is there a way to construct a max-heap from an array in O(n) using PriorityQueue?
如果我错了请纠正我,但我认为 PriorityQueue(Collection c) 构造函数将在时间 O(n) 内从集合创建最小堆。但是,我找不到可以同时传递集合和比较器的构造函数(以便将最小堆转换为最大堆)。所以我想知道是否有一种方法可以使用 PriorityQueue 从 O(n) 的数组(比如 int 数组)构造最大堆?
不,将一组元素排列在最小堆中并不能为将它们重新排列到最大堆中提供任何优势。此外,您似乎假设接受集合的 PriorityQueue
构造函数具有 O(n)
渐近复杂性。这是有道理的——甚至有可能——但没有记录在案,因此依赖它是不安全的。
如果我错了请纠正我,但我认为 PriorityQueue(Collection c) 构造函数将在时间 O(n) 内从集合创建最小堆。但是,我找不到可以同时传递集合和比较器的构造函数(以便将最小堆转换为最大堆)。所以我想知道是否有一种方法可以使用 PriorityQueue 从 O(n) 的数组(比如 int 数组)构造最大堆?
不,将一组元素排列在最小堆中并不能为将它们重新排列到最大堆中提供任何优势。此外,您似乎假设接受集合的 PriorityQueue
构造函数具有 O(n)
渐近复杂性。这是有道理的——甚至有可能——但没有记录在案,因此依赖它是不安全的。