这个题目首先要搞清 Hash函数 的用法,那么这道题就容易多了
题目:给你n个整数,请按从大到小的顺序输出其中前m大的数。
输入:每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的整数。
输出:对每组测试数据按从大到小的顺序输出前m大的数。
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
int n,m,a,j;
char t[1000001]={'0'};
while(scanf("%d%d",&n,&m)!=EOF)
{
//memset(t,'0',sizeof(t)); 赋值,相当于 t[1000001]={'0'};
for(int i=0;i<n;i++)
{
scanf("%d",&a);
t[a+500000]='1';
}
for(j=1000000;j>0;j--) //j可以等于0;
{
if(t[j]=='1')
{
if(m>0)
{
printf("%d",j-500000);
if(m!=1)
{
printf(" ");
}
m--;
//要放在if外面 因为放在里面 m=1 时,不会运行if,则 m 不会自减,则 m 永远大于 0;因此会输出所有数据
}
}
}
printf("\n");
}
return 0;
}