最小k个数
思路一:优先队列
使用优先队列维护最小的k个数,如果队列中元素个数 < k <k <k将该元素入队,否则判断对头元素大小,每次保留最小的元素,最后剩余元素就是最小k个数,从优先队列中取出,然后返回
class Solution {
public:
vector<int> smallestK(vector<int>& arr, int k) {
int n = arr.size();
vector<int> ans;
if (!n) return ans;
priority_queue<int> q;
for (int i = 0; i < n; i ++ ) {
if (q.size() < k) {
q.push(arr[i]);
}
else if (q.size()) {
if (q.top() > arr[i]) {
q.pop();
q.push(arr[i]);
}
}
}
while (q.size()) {
ans.push_back(q.top());
q.pop();
}
return ans;
}
};