题目描述:
给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。如果K>数组的长度,那么返回一个空的数组
解题分析:
使用C++自带的priority_queue函数(默认是大顶堆),首先在堆里存储K个数,之后的数若是小于堆顶数,则弹出堆顶,加入该数,最后堆里存储的便是最小的K个数,取出即可。
class Solution {
public:
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
if(input.size()==0 || input.size()<k || k==0)
return {};
priority_queue<int> heap;
for(int i=0; i<input.size(); ++i){
if(i<k){
heap.push(input[i]);
}
else{
if(heap.top()>input[i]){
heap.pop();
heap.push(input[i]);
}
}
}
vector<int> ans;
for(int i =0; i<k; ++i){
ans.push_back(heap.top());
heap.pop();
}
return ans;
}
};