题目描述
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
代码:
class Solution {
public:
vector<int> GetLeastNumbers_Solution(vector<int> input1, int k) {
int len=input1.size();
vector<int>res;
vector<int>input;
input.push_back(0);
//...............len<=k特殊处理
if(len<k)
return res;
if(len==k){
return input1;
}
//.............
for(auto x:input1){
input.push_back(x);
}//把input1【0,len】复制到input[1,len+1],便于利用堆排序
len=input.size()-1;
for(int i=(len)/2;i>=1;i--){
dui_sort(input,i,len);
}//建堆
for(int i=0;i<k;i++){
swap(input[1],input[len-1]);
res.push_back(input[len-1]);
input.pop_back();
len--;
dui_sort(input,1,len);
}
return res;
}
void dui_sort(vector<int>&a,int low,int high){//堆排序
int temp=a[low];
int i=low,j=2*i;
while(j+1<=high){
if(j+1<=high&&a[j]>a[j+1])j++;
if(a[j]<a[i]){
swap(a[i],a[j]);
i=j;
j=i*2;
}else break;
}
}
};
这题目有坑。。。k可能大于等于input数组的长度,所以要特殊处理。。。。找了好久错误找出来