最小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))

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; 
    }
};

猜你喜欢

转载自www.cnblogs.com/tianzeng/p/12342924.html