class Solution {
public:
/**
partition function in quick sort, range [lh, rh)
returns pivot index after partition
*/
int Partition(vector<int> &input, int lh, int rh) {
int pivot = lh;
int index = pivot + 1;
auto swap = [](vector<int> &input, int i1, int i2) -> void {
int tmp = input[i1];
input[i1] = input[i2];
input[i2] = tmp;
};
for(int i = index; i < rh; ++i) {
if(input[i] < input[pivot]) {
swap(input, i, index++);
}
}
swap(input, index - 1, pivot);
return index - 1;
}
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param input int整型vector
* @param k int整型
* @return int整型vector
*/
vector<int> GetLeastNumbers_Solution(vector<int>& input, int k) {
if(k == 0) {
return {};
}
int lh = 0, rh = input.size(), p;
while(lh < rh) {
p = Partition(input, lh, rh);
if(p + 1 == k) {
return vector<int>(input.begin(), input.begin() + k);
} else if(p < k) {
lh = p + 1;
} else {
rh = p;
}
}
// NEVER REACHED HERE
return {-1};
}
};