//O(n)快排的Partition
class Solution {
public:
int partition(vector<int>& input,int start,int end)
{
int pivat=start;
swap(input[pivat],input[end]);
int small=start-1;
for(int i=start;i<end;i++)
{
if(input[i]<input[end])
{
++small;
if(small!=i)
{
swap(input[small],input[i]);
}
}
}
small++;
swap(input[small],input[end]);
return small;
}
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
vector<int> res;
if(input.empty()||k>(int)input.size()||k<1)
return res;
unsigned int end=input.size()-1;
unsigned int start=0;
int index=partition(input,start,end);
while(index!=k-1)
{
if(index>k-1)
{
end=index-1;
index=partition(input,start,end);
}
else
{
start=index+1;
index=partition(input,start,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) {
vector<int> res;
if(input.empty()||k>(int)input.size()||k<1)
return res;
make_heap(input.begin(),input.end(),greater<int>());//生成小根堆
for(int i=0;i<k;i++)
{
res.push_back(input.front());
pop_heap(input.begin(),input.end(),greater<int>());
input.pop_back();
push_heap(input.begin(),input.end(),greater<int>());
}
return res;
}
};
topk问题整理
最新推荐文章于 2024-07-18 16:38:07 发布