最小的K个数

题目描述

输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
解答:
用最简单的方法,优先队列
#include <queue>
class Solution {
public:
    vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
        vector<int> res;
        if(input.empty()==true || k<=0 || k>input.size()) return res;
        priority_queue<int,vector<int>, greater<int> > q; 
        for(int i=0;i<input.size();i++) q.emplace(input[i]);
        for(int i=0;i<k;i++){
            res.emplace_back(q.top());
            q.pop();
        }
        return res;
    }
};
//堆

这道题比较坑的一点是input.empty()==true || k<=0 || k>input.size()这个条件占了绝大部分的样例,所以出错了很难检查到。

比较好的思路是维护一个固定长度的最小堆。

posted @ 2019-12-06 14:21  decq!  阅读(206)  评论(0编辑  收藏  举报