题意
找出数组中最小的 k 个数。
分析
法一:直接排序,取前 k 个
法二:
维护一个大根堆,每次把元素加入大根堆,如果大根堆里元素个数大于 k,那么弹出堆顶元素。
这样大于第 k 小元素的数总是会被弹出,最后剩下的就是最小的 k 个元素。
class Solution {
public:
vector<int> getLeastNumbers_Solution(vector<int> input, int k) {
priority_queue<int> pq;
int len = input.size();
for(int i = 0; i < len; i ++){
pq.push(input[i]);
if(pq.size() > k)pq.pop();
}
vector<int> res;
while(!pq.empty()){
res.push_back(pq.top());
pq.pop();
}
reverse(res.begin(), res.end());
return res;
}
};