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


全部评论
输入那里有问题,我开始也是这么写的
点赞 回复 分享
发布于 2017-08-27 14:04
vector<int>input; int num; do { cin>>num; input.push_back(num); }while(getchar()!='\n');
点赞 回复 分享
发布于 2017-08-26 17:39
这道题algorithm也不屏蔽,具体的排序函数也不屏蔽,真是醉了(偷笑
点赞 回复 分享
发布于 2017-08-26 17:36
输入哪里要判断回车来确定第一行输入已完成,在输入k的值
点赞 回复 分享
发布于 2017-08-26 17:28
我直接sort居然过了。。。。。。。。。。。
点赞 回复 分享
发布于 2017-08-26 17:28
降序排 第k-1个啊
点赞 回复 分享
发布于 2017-08-26 17:27
直接nth_emement
点赞 回复 分享
发布于 2017-08-26 17:18

相关推荐

FieldMatching:看成了猪头顾问,不好意思
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务