题目描述
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
解法一:基于Partition函数的O(n)算法。缺点:修改数据
解法二:基于最大堆或红黑树(set)的O(nlogk)的解法。适合海量数据
class Solution {
public:
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
if(input.empty()||k>input.size()) return {};
multiset<int,greater<int>> topK;
for(int i=0;i<input.size();++i){
if(topK.size()<k)
topK.insert(input[i]);
else{
multiset<int>::iterator it=topK.begin();
if(*it>input[i]){
topK.erase(it);
topK.insert(input[i]);
}
}
}
vector<int> res;
//res.insert(res.begin(),topK.begin(),topK.end());
for(auto a:topK)
res.push_back(a);
return res;
}
};