堆的应用之Top-k问题

发布时间:2024年01月21日

求数据集合中的前k个最小的数

1.基础思路

建立一个小根堆,每次拿走第一个元素,拿走k次即可,代码如下,以k=3为例:

但这样,因为插入操作是向上调整,所以建堆的时间复杂度为nlog2n,而删除操作的时间复杂度为3log2n,所以总的时间复杂度为:O(Nlog2N)。有点大

2.进阶思路

建立一个有k个元素的堆,然后从第k+1个元素开始,与堆顶元素进行比较,如果比堆顶元素大,就将这个元素offer进去,代码如下:

时间复杂度为O(log2N)。

文章来源:https://blog.csdn.net/zyh20050430/article/details/135725548
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。