剑指offer 40:最小的K个数

在这里插入图片描述
思路
topK问题想到使用堆数据结构解决, 最小的K个数要维护一个大根堆,大根堆的元素有K个

class Solution {
    
    
public:
    vector<int> getLeastNumbers(vector<int>& arr, int k) {
    
    
        priority_queue<int> q;
        vector<int> res;
        if(k == 0) return res;
        for (int i = 0; i < k; ++i) q.push(arr[i]);
        for (int i = k; i < arr.size(); ++i) {
    
    
            if (q.top() > arr[i]) {
    
    
                q.pop();
                q.push(arr[i]);
            }
        }
        for (int i = 0; i < k; ++i) {
    
    
            res.push_back(q.top());
            q.pop();
        }
        return res;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_44537258/article/details/114303969
今日推荐