求助~滴滴笔试第二题怎么都AC不了。。。。
滴滴笔试第二题(求第k大数)怎么都AC不了,求各位大佬帮忙看看,谢谢! 一开始用的堆排,后来用的快排,都不行,通过率0。。。。
#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
void HeapAdjust(vector<int> &nums,int point,int len){
int tmp=nums[point];
int child=point*2+1;
while(child<len){
if(child+1<len && nums[child]<nums[child+1]){
child++;
}
if(nums[point]>nums[child]){
break;
}
else{
nums[point]=nums[child];
point=child;
child=2*point+1;
}
}
nums[point]=tmp;
}
int func(vector<int> &nums,int k) {
int len=nums.size();
for(int i=len/2-1;i>=0;i--){
HeapAdjust(nums,i,len);
}
for(int i=len-1;i>len-k;i--){
swap(nums[0],nums[i]);
HeapAdjust(nums,0,i);
}
return nums[0];
}
int main(){
vector<int> nums;
int tmp;
while(cin>>tmp){
nums.push_back(tmp);
}
int k;
cin>>k;
int res=func(nums,k);
cout<<res<<endl;
return 0;
}

