题目描述
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
分析:寻找最小的k个数,构造一个大小为k最大堆,若k后面的元素比堆顶元素大,直接跳过,若比堆顶元素小,则弹出堆顶元素,把这个元素插入堆。
代码:
class Solution {
public:
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
priority_queue<int> maxheap;
int n=input.size();
if(k<=0||k>n){
return vector<int>();
}
for(int i=0;i<n;i++){
if(maxheap.size()<k){
maxheap.push(input[i]);
}else{
if(input[i]>=maxheap.top()){
continue;
}else{
maxheap.pop();
maxheap.push(input[i]);
}
}
}
vector<int> ret;
while(!maxheap.empty()){
ret.push_back(maxheap.top());
maxheap.pop();
}
return vector<int>(ret.rbegin(),ret.rend());
}
};