最小的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()这个条件占了绝大部分的样例,所以出错了很难检查到。
比较好的思路是维护一个固定长度的最小堆。
部分资料直接复制网络中其他文章,仅供个人参考学习