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;
}
};


京公网安备 11010502036488号