Problem Description
给你n个整数,请按从大到小的顺序输出其中前m大的数。
Input
每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的整数。
Output
对每组测试数据按从大到小的顺序输出前m大的数。
Sample Input
5 3
3 -35 92 213 -644
Sample Output
213 92 3
代码
#include<bits/stdc++.h>
using namespace std;
const int N=1000001;
int H[N];
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
memset(H,0,sizeof(H));
for(int i=0;i<n;i++){
int x;
scanf("%d",&x);
H[x+500000]=1;
}
for(int i=N;m>0;i--){
if(H[i]){
if(m>1) printf("%d ",i-500000);
else printf("%d\n",i-500000);
m--;
}
}
}
return 0;
}
总结
题目对于时间的要求很大,根据题目所需建立一个哈希表,实际上就是牺牲空间来换取时间,负数的部分需要加到正才能用数组直接存储