建立一个小根堆,每次拿走第一个元素,拿走k次即可,代码如下,以k=3为例:
但这样,因为插入操作是向上调整,所以建堆的时间复杂度为nlog2n,而删除操作的时间复杂度为3log2n,所以总的时间复杂度为:O(Nlog2N)。有点大
建立一个有k个元素的堆,然后从第k+1个元素开始,与堆顶元素进行比较,如果比堆顶元素大,就将这个元素offer进去,代码如下:
时间复杂度为O(log2N)。