面试题 17.14. 最小K个数
设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。
示例:
输入: arr = [1,3,5,7,2,4,6,8], k = 4
输出: [1,2,3,4]
解析(c++):
大根堆。
时间复杂度:O(nlogk)
空间复杂度:O(n)
class Solution {
public:
vector<int> smallestK(vector<int>& arr, int k) {
vector<int> res;
priority_queue<int> max;//大根堆
//放进队列
for (auto num: arr) {
max.push(num);
if (max.size() > k) max.pop(); //个数大于k,出队。
}
//打印队列
while (!max.empty()) {
res.push_back(max.top());
max.pop();
}
return res;
}
};