- 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
- 可以使用优先队列,或者直接写出堆排序
- C++ 代码(直接写出堆排序的代码)
class Solution {
public:
void adjust(vector<int> &input, int index,int k){
int key = input[index];
int i = 0;
for(i = (index+1)*2-1;i<=k;i=(i+1)*2-1)
{
if(i < k&& input[i+1]>input[i])
i++;
if(input[i]<key)
break;
input[index] = input[i];
index = i;
}
input[index] = key;
}
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
/* if(input.empty()||k==0||k>input.size()) return {};
vector<int> p;
priority_queue<int,vector<int>,greater<int>> q;
vector<int>::iterator it;
for(it=input.begin();it!=input.end();it++)
q.push(*it);
for(int i=0;i<k;i++){
p.push_back(q.top());
q.pop();
}
return p; */
if(input.empty()||k==0||k>input.size()) return {};
for(int i = (k/2-1); i>=0;i--){
adjust(input,i,k-1);
}
for(int i = k;i <input.size();i++)
if(input[i]<input[0]) {
input[0]=input[i];
adjust(input,0,k-1);
}
return vector<int> (input.begin(),input.begin()+k);
}
};
网友评论