输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
思路:堆排序(最大堆),用multiset模拟堆,可以在nlogk时间内完成.
注意处理边界
“`
class Solution {
public:
vector GetLeastNumbers_Solution(vector input, int k)
{
vector answer;
int len= input.size();
if(len < k)
{
return answer;
}
multiset<int,greater<int>> kData;
for(int i= 0; i< input.size(); ++i)
{
if(kData.size() < k)
{
kData.insert(input[i]);
continue;
}
multiset<int,greater<int>>::iterator it= kData.begin();
if(*it > input[i])
{
kData.erase(it);
kData.insert(input[i]);
}
}
for(multiset<int,greater<int>>::iterator it= kData.begin(); it!= kData.end(); ++it)
{
answer.push_back(*it);
}
int i= 0, j= answer.size()-1;
while(i< j)
{
swap(answer[i++],answer[j--]);
}
return answer;
}
};
“