[大根堆]面试题40. 最小的k个数(easy)

题目:
在这里插入图片描述
题解:

  • 大根堆模板题,维持一个大小为 k 的大根堆就可得到数组前 k 个最小数了。

代码如下:

class Solution {
public:
    vector<int> getLeastNumbers(vector<int>& arr, int k) {
        if(!k)return {};
        priority_queue<int> heap;//维持大小为k的大根堆
        for(int a:arr){
            if(heap.size()<k)heap.push(a);
            else{
                if(heap.top()<=a)continue;//元素比堆顶元素值大,不需要添加到堆中
                else{
                    heap.pop();
                    heap.push(a);
                }
            }
        }
        vector<int> res;
        while(!heap.empty()){
            res.push_back(heap.top());
            heap.pop();
        }
        return res;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章