题目描述
输入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)
{
vector<int> res;
int sizein = input.size();
if(sizein <= 0 || k <= 0 || k > sizein)
{
return res;
}
sort(input.begin(),input.end());
res.assign(input.begin(),input.begin()+k);
return res;
}
};
class Solution {
public:
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
int len=input.size();
vector<int> res;
if(len<=0||k>len||k<=0) return res;
for(int i=0;i<k;++i)
res.push_back(input[i]);
make_heap(res.begin(),res.end());
//默认make_heap,最大的在开头,
for(int i=k;i<len;++i)
{
if(res.front() > input[i])
//开头最大元素大于新来的,就弹出开头,让新来的进去
{
pop_heap(res.begin(),res.end());
res.pop_back();
res.push_back(input[i]);
push_heap(res.begin(),res.end());
//重新堆排列
}
}
sort_heap(res.begin(),res.end());
return res;
}
};
class Solution {
public:
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
int len=input.size();
vector<int> res;
if(len<=0||k>len||k<=0) return res;
for(int i=0;i<k;++i)
res.push_back(input[i]);
sort(res.begin(),res.end());
//默认对vector进行sort排序,最大的在末尾,从小到大
for(int i=k;i<len;++i)
{
if(res.back() > input[i])
//末尾是最大元素,末尾大于新来的,就弹出开头,让新来的进去
{
res.pop_back();
res.push_back(input[i]);
sort(res.begin(),res.end());
//重新堆排列
}
}
sort(res.begin(),res.end());
return res;
}
};