剑指offer
题目:最小的K个数
描述:给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。如果K>数组的长度,那么返回一个空的数组
代码:
#include<iostream>
#include<vector>
#include<algorithm>
#include<functional>
using namespace std;
class Solution
{
public:
vector<int> GetLeastNumbers_Solution(vector<int> input, int k)
{
vector<int> ret;
if (input.empty() || k > input.size())
{
return ret;
}
make_heap(input.begin(), input.end(), greater<int>());
for (int i = 0; i < k; i++)
{
pop_heap(input.begin(), input.end(), greater<int>());
ret.push_back(input.back());
input.pop_back();
}
return ret;
}
};
int main()
{
int b[10] = {3, 1, 4, 8, 5, 2, 6, 9, 7, 0};
vector<int> a(b, b + 10);
vector<int> out;
Solution A;
out = A.GetLeastNumbers_Solution(a, 5);
for (int i = 0; i < out.size(); i++)
{
cout << out[i] << " ";
}
cout << endl;
}