输入 n 个整数,找出其中最小的 k 个数。
注意:
数据保证 k 一定小于等于输入数组的长度;
输出数组内元素请按从小到大顺序排序;
样例
(堆排序)维护一个大小为k的大根堆,将数组元素都放进,当堆中的数大于k时弹出堆顶元素。注意弹出堆顶的顺序是从大到小的k个数,要进行逆序操作,时间复杂度:建堆的时间复杂度是O(logk),要进行n次建堆的操作。 故总时间复杂度O(nlogk)
class Solution {
public:
vector<int> getLeastNumbers_Solution(vector<int> input, int k) {
vector<int> ans;
priority_queue<int> heap;
for(auto x : input){
heap.push(x);
if(heap.size() > k) heap.pop();
}
while(heap.size()){
ans.push_back(heap.top());
heap.pop();
}
reverse(ans.begin(),ans.end());
return ans;
}
};
当然也可以建立小根堆,留给读者思考一下。