您的位置:首页 > Web前端

[剑指offer]最小的K个数

2016-05-03 10:31 204 查看


题目描述

输入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());
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: