一 利用快排 partition
轴值的下标是k-1的时候,说明前面的K个数就是所求。
vector<int> GetLeastNumbers_Solution(vector<int> input, int k)
{
vector<int> result;
if (0 >= input.size() || k > input.size()||k<1)
return result;
int l=0;
int r=input.size()-1;
int index= partition(input,l,r);
while(index!=k-1)
if(index<k-1)
{
l=index+1;
index= partition(input,l,r);
}
else
{
r=index-1;
index= partition(input,l,r);
}
vector<int> res(input.begin(), input.begin() + k);
return res;
}
int partition(vector<int> &s,int l,int r)
{
int i=l;
int j=r;
int x=s[i];
while (i<j)
{
while(i<j&&s[j]>=x)
j--;
if(i<j)
{
s[i]=s[j];
i++;
}
while(i<j&&s[i]<x)
i++;
if(i<j)
{
s[j]=s[i];
j--;
}
}
s[i]=x;
return i;
}