1.直接用cmath里面sort()排序
直接排序输入数组,
返回最小的k个
class Solution { public: vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { sort(input.begin(),input.end()); vector<int> res; if(k>input.size()) return res; for(int i=0;i<k;++i) res.push_back(input[i]); return res; } };
2.用优先级队列实现堆排序
优先级队列首先是个队列,这里有点public继承的味道,is-a的关系
所以,队列特有“先进先出”
优先级显然大的在前
这边用常值int变量 val来遍历输入数组input, const int val:input,
让人想到python遍历的样子。
首先少于k,就直接入队
大等于k,审核入队,只有比队首最大的小,这是个大顶堆,可以来输出最小的几个值,
举一反三,如果是最大的几个值,应该是用小顶堆,如果有比最小值大的,val>pq.top(),则入队
输出采用了同类型的ret来存放
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(const int val:input) {//让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; } };