题目描述
输入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;
}
};