leetcode:面试题 17.14. 最小K个数

面试题 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;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_36156649/article/details/107951250