问题
找出数组最小的k个数
算法:优先队列
经典题,遍历数组,维护一个大小为k的大根堆,最后剩下的k个元素就是答案
复杂度
时间:$O(NlogK)$
空间:$O(K)$
代码
class Solution {
public:
vector<int> getLeastNumbers(vector<int>& arr, int k) {
priority_queue<int> heap;
for(auto x: arr){
heap.push(x);
if(heap.size() > k){
heap.pop();
}
}
vector<int> ans;
while(heap.size()){
ans.push_back(heap.top());
heap.pop();
}
return ans;
}
};