题目描述:
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4.
分析:
完整代码:
class Solution {
public:
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
//声明一个容器,用来存放最小k个数字
vector<int> array;
//清空 array
array.clear();
//检查输入的合法性
if(input.size() < k || k < 1)
return array;
//声明一个迭代器,智能读取容器中的元素,不能修改
vector<int>::const_iterator iter = input.begin();
//使用 intset 声明一个容器
intset result;
//遍历整个容器
for(; iter != input.end(); ++iter)
{
//如果 array 容器没有装满
if((result.size()) < k)
result.insert(*iter);
//如果容器已经装满
else
{
//声明一个迭代器
setIterator it = result.begin();
//判断当前的元素是否大于array中的第一个元素
if(*iter < *(result.begin()))
{
//删去array的第一个元素
result.erase(*it);
//将当前的元素插入到 array 中
result.insert(*iter);
}
}
}
//重新排序
for(setIterator point = result.begin(); point != result.end(); ++point)
{
array.push_back(*point);
}
//返回最终的结果
return array;
}
private:
typedef multiset<int, greater<int> > intset;
typedef multiset<int, greater<int> >:: iterator setIterator;
};