设计一个算法,找出数组中最小的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))
code
class Solution { public: vector<int> smallestK(vector<int>& arr, int k) { if(arr.empty()||k<=0) return {}; vector<int> res(arr.begin(),arr.begin()+k); make_heap(res.begin(),res.end()); for(int i=k;i<arr.size();++i) { if(arr[i]<res[0]) { pop_heap(res.begin(),res.end()); res.pop_back(); res.push_back(arr[i]); push_heap(res.begin(),res.end()); } } sort(res.begin(),res.end()); return res; } };