class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param input int整型vector
* @param k int整型
* @return int整型vector
*/
vector<int> GetLeastNumbers_Solution(vector<int>& input, int k) {
// write code here
vector<int> result;
for(int i = 0;i<k;i++){
int size = input.size();
HeapSort(input);
result.push_back(input[0]);
int last = input[size-1];
input[0] = last;
input.pop_back();
}
return result;
}
void HeapSort(vector<int>& input){
int N = input.size();
for(int i = N / 2;i >= 0;i--){
doIt(input,i,N);
}
}
void doIt(vector<int>& input,int k,int N){
int value = input[k];
//从0开始估i = 2 * k + 1
for(int i = 2 * k +1;i < N;i = 2 * i +1){
if(i < N-1 && input[i] < input[i+1])
i++;
if(value >= input[i])
break;
input[k] = input[i];
k = i;
}
input[k] = value;
}