求助~滴滴笔试第二题怎么都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; }