AcWing 53. 最小的k个数

题目描述

输入n个整数,找出其中最小的k个数。

注意:

  • 数据保证k一定小于等于输入数组的长度;
  • 输出数组内元素请按从小到大顺序排序;

样例

输入:[1,2,3,4,5,6,7,8] , k=4

输出:[1,2,3,4]

问题分析 

创建一个大顶堆pq,然后遍历数组input。先将遍历到的当前元素push进pq,然后判断如果pq中元素的个数大于k,那么将pq顶端元素弹出。当数组input遍历结束后,pq中的元素就是最小的k个元素了。将它们保存进ans数组返回即可。

代码实现

class Solution {
public:
    vector<int> getLeastNumbers_Solution(vector<int> input, int k) {
        vector<int> ans;
        priority_queue<int> pq;
        for(int i : input){
            pq.push(i);
            if(pq.size() > k)
                pq.pop();
        }
        while(!pq.empty()){
            ans.push_back(pq.top());
            pq.pop();
        }
        reverse(ans.begin(), ans.end());
        return ans;
    }
};

猜你喜欢

转载自blog.csdn.net/mengyujia1234/article/details/89891028