堆的应用之Top-k问题

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

1.基础思路

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

堆的应用之Top-k问题_第1张图片

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

2.进阶思路

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

堆的应用之Top-k问题_第2张图片

时间复杂度为O(log2N)。

你可能感兴趣的:(数据结构,堆)