class Solution {
public:
    vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
        vector<int> ret;
        if(k == 0 || k > input.size())
            return ret;
        priority_queue<int, vector<int>> pq;
        for(int val : input){
            if(pq.size()<k)
                pq.push(val);
            else{
                if(val < pq.top()){
                    pq.pop();
                    pq.push(val);
                }
            }
        }
        while(!pq.empty()){
            ret.push_back(pq.top());
            pq.pop();
        }

        return ret;
        
    }
};

优先队列模拟大根堆
每次与堆顶元素比较,若比堆顶元素小,则将堆顶元素出堆,当前元素入堆
  • 最小n个数:大根堆,比堆顶小则加入
  • 最大n个数:小根堆,比堆顶大则加入