[经典] 在未排序数组中返回topK大的数

Posted 小尾巴君

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[经典] 在未排序数组中返回topK大的数相关的知识,希望对你有一定的参考价值。

解法一,排序

先从大到小快排,然后扫前K个返回

时间复杂度:O(NlogN),空间复杂度O(1)

解法二,优先队列

前K个放入优先队列中,与最小堆顶元素比较大小,若大于则删除堆顶并插入;否则跳过

时间复杂度:O(NlogK),空间复杂度O(K)

解法三,堆调整

先将数组直接用完全二叉树存储,复杂度O(N);然后对树进行堆调整,调整为最大堆,复杂度不超过O(2N)(对每一层的操作总次数进行分析);最后弹出K个堆顶元素,复杂度不超过O(KlogN)。由于K比N小得多,复杂度为O(N)

时间复杂度:O(N),空间复杂度也是O(N)

以上是关于[经典] 在未排序数组中返回topK大的数的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode.215-数组中的第K个最大元素

数组的学习总结

图文最详细的堆解析:从二叉树到堆到解析大根堆小根堆,分析堆排序,最后实现topK经典面试问题

经典算法之快速选择算法

那些经典算法:堆排序应用

大张老师帮你快速理解程序经典算法:快速排序算法