面试题 17.14. 最小K个数
难度:中等
设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。
示例:
输入: arr = [1,3,5,7,2,4,6,8], k = 4
输出: [1,2,3,4]
思路:
优先级队列(大顶堆)
class Solution {
public:
vector<int> smallestK(vector<int>& arr, int k) {
//1.直接排序
//2.大顶堆(优先级队列)
vector<int> res(k,0);
if(0==k)
{
return res;
}
priority_queue<int> Q;
for(int i=0;i<k;i++)
{
Q.push(arr[i]);
}
int Len=arr.size();
for(int i=k;i<Len;i++)
{
if(Q.top()>arr[i])
{
Q.pop();
Q.push(arr[i]);
}
}
for(int i=0;i<k;i++)
{
res[i]=Q.top();
Q.pop();
}
return res;
}
};