题目:
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
思路:
将这一组数进行排序,最后取出前K个数。
方法一:调用系统函数sort。
class Solution {
public:
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
int size = input.size();
vector<int> res;
if(k<=0 || k>size)
return res;
sort(input.begin(), input.end());
for(int i=0; i<k; i++){
res.push_back(input[i]);
}
return res;
}
};
方法二:
自己写堆排进行排序。
class Solution {
public:
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
int size = input.size();
vector<int> res;
if(k<=0 || k>size)
return res;
for(int i=0; i<k; i++){
HeapSort(input, i, input.size());
res.push_back(input[i]);
}
return res;
}
//堆排,root为当前堆的根结点
void HeapSort(vector<int>& input, int root, int end){
for(int i=end-1; i>=root; i--){
int parent = (i+root-1)>>1;
if(input[parent] > input[i])
swap(input[parent], input[i]);
}
}
};