时间限制:1秒 空间限制:32768K 热度指数:363913
本题知识点: 数组
算法知识视频讲解
题目描述
输入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> input, int k) {
vector<int> v;
if(k>input.size()){
return v;
}
int i,j,l,n=input.size(),sum;
for(i=n/2-1;i>=0;i--){
l=i;
while(l<n){
if(l*2+1<n){
j=l*2+1;
}
if(l*2+2<n&&input[j]>input[l*2+2]){
j=l*2+2;
}
if(input[j]<input[l]){
int tmp=input[l];
input[l]=input[j];
input[j]=tmp;
}else{
break;
}
l=j;
}
}
sum=n;
while(k--){
v.push_back(input[0]);
sum--;
input[0]=input[sum];
l=0;
while(l<sum){
if(l*2+1<sum){
j=l*2+1;
}
if(l*2+2<sum&&input[j]>input[l*2+2]){
j=l*2+2;
}
if(input[j]<input[l]){
int tmp=input[l];
input[l]=input[j];
input[j]=tmp;
}else{
break;
}
l=j;
}
}
return v;
}
};