【 声明:版权所有,转载请标明出处,请勿用于商业用途。 联系信箱:libin493073668@sina.com】
题目描述
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。
思路
我们可以直接排序然后取出前K个数,当然这种时间复杂度并不是最好的,对于k比较小的时候,直接排序会比较浪费时间
我们可以先保存前K个数进结果数组,然后再将其排序,然后当数组出现新的比现在结果数组最大的数小的数的时候,我们再弹出结果数组最大的数
class Solution
{
public:
vector<int> GetLeastNumbers_Solution(vector<int> input, int k)
{
int len = input.size();
vector<int> ans;
if(k<1 || k>len)
return ans;
for(int i = 0; i<len; i++)
{
if(ans.size()<k)
{
ans.push_back(input[i]);
if(ans.size()==k)
sort(ans.begin(),ans.end());
}
else
{
if(input[i]<ans[k-1])
{
ans[k-1] = input[i];
if(k>1 && ans[k-1]<ans[k-2])
sort(ans.begin(),ans.end());
}
}
}
return ans;
}
};