题目描述
思路一
先排序,排完序后输出前K个数字即可,使用系统自带的sort函数.
思路二
使用一个堆来维持最小的K个数字,那么我们应该选择小根堆还是大根堆呢?我们如何使用小根堆,那么top函数返回值为当前的最小值,我们想要边遍历边更新堆,那么每次淘汰的都应该是当前堆里面最大的数值,那么应该使用大根堆这种数据结构,这种数据结构对应的是priority_queue<int> que;具体代码见下:
代码
class Solution {
public:
vector<int> getLeastNumbers(vector<int>& arr, int k) {
priority_queue<int> que;
vector<int> res;
if (k == 0) return res;
for (int i = 0; i < k; ++i) {
que.push(arr[i]);
}
for (int i = k; i < arr.size(); ++i) {
if (arr[i] < que.top()) {
que.pop();
que.emplace(arr[i]);
}
}
while (!que.empty()) {
res.push_back(que.top());
que.pop();
}
return res;
}
};