描述
寻找第K大数
N个小朋友在一起做游戏。每个小朋友在自己的硬纸板上写一个数,然后同时举起来。接着,小y老师提一个问题,看哪个小朋友先抢答出来。问题是:在这N个数中,第K大的是哪个数?请你编程完成。
水题一道:
桶排
#include<cstdio> #include<iostream> #include<algorithm> #include<vector> #include<queue> #include<cstring> #include<cmath> using namespace std; int a[40000],b[40000]; int n,k,maxn; int main() { scanf("%d%d",&n,&k); for(int i=1,x;i<=n;i++) { scanf("%d",&x); maxn=max(maxn,x); if(x>=0) a[x]++; else b[-x]++; } for(int i=maxn;i>=0;i--) { k-=a[i]; if(k<=0) { printf("%d",i); return 0; } } for(int i=1;i<=40000;i++) { k-=b[i]; if(k<=0) { printf("%d",-i); return 0; } } return 0; }