可维护一个长度为k的最小数组成的multiset,其中的数字就是最小的k个数。
如果需要去重的话采用set,set是集合,所有的数字只出现一次。
class Solution {
public:
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
multiset<int > s;
vector<int > result;
set<int >::iterator iter;
if(k>input.size()||k==0)
return result;
for(int i=0;i<k;i++)
s.insert(input[i]);
for(int i=k;i<input.size();i++)
{
iter=s.begin();
advance(iter,k-1); //调整到最后一个迭代器
if(input[i]<*iter)
{
s.erase(iter);
s.insert(input[i]);
}
}
for(iter=s.begin();iter!=s.end();iter++)
result.push_back(*iter);
return result;
}
};