1、描述
设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。
示例:
输入: arr = [1,3,5,7,2,4,6,8], k = 4
输出: [1,2,3,4]
提示:
0 <= len(arr) <= 100000
0 <= k <= min(100000, len(arr))
通过次数43,604提交次数76,666
来源:力扣(LeetCode)
链接:
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2、关键字
数组,最小k个数,
3、思路
优先队列,小根堆
4、notes
暂时不会确定优先队列得个数,那就都构造进去,然后根据需要截取
5、复杂度
时间:O(nlogN)堆排序得时间复杂度,
空间:O(N)
6、code
struct cmp{ // 小根堆得可调用对象,
bool operator()(int a, int b){
return a > b;
}
};
class Solution {
public:
vector<int> smallestK(vector<int>& arr, int k) {
priority_queue<int,vector<int>,cmp> que; // 构造小根堆
for(auto & num : arr){ // 初始化小根堆
que.push(num);
}
vector<int>res;
for(int i = 0; i < k; i++){ // 按需要截取个数,
res.push_back(que.top());
que.pop();
}
return res;
}
};