首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在java中用O(N)而不是O(NlogN)构建堆

在java中用O(N)而不是O(NlogN)构建堆
EN

Stack Overflow用户
提问于 2019-05-21 03:55:06
回答 1查看 598关注 0票数 2

为了构建堆,我们使用java中的PriorityQueue类。有没有一种方法可以使用内置的库/类直接从O(N)中的数组构建堆,而不是在O(NlogN)中单独推送每个元素来构建堆?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-21 04:07:25

使用the constructor that takes a collection

代码语言:javascript
复制
new PriorityQueue<String>(Arrays.asList(yourArray));

一如既往,Java Docs没有提到任何关于复杂性的内容,但是阅读the source code可以发现OpenJDK使用了典型的O(n)堆方法,而不是在循环中插入:

代码语言:javascript
复制
private void initFromCollection(Collection<? extends E> c) {
    initElementsFromCollection(c);
    heapify();
}
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56227358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档