要构建堆,我们在Java中使用PriorityQueue类。有没有一种方法可以使用内置库/类直接从O(N)中的数组构建堆,而不是单独推送每个元素以在O(NlogN)中构建堆?
答案 0 :(得分:3)
使用the constructor that takes a collection:
new PriorityQueue<String>(Arrays.asList(yourArray));
Java Docs确实没有提及任何复杂性,但是阅读the source code表示OpenJDK使用典型的O(n)
堆化方法,而不是插入循环:
private void initFromCollection(Collection<? extends E> c) {
initElementsFromCollection(c);
heapify();
}