题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1425
由于题目数据很水所以用快排居然也过了
但是必须知道的是 一般情况下当数据范围超过1e5的时候快排就会超时的
快排的时间复杂度为O(nlog(n)),而此题 为O(n);
快排
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int a[1000000];
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,a+n,cmp);
for(int i=0;i<m-1;i++)
printf("%d ",a[i]);
printf("%d\n",a[m-1]);
}
return 0;
}
hash
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int maxn = 1000005;
int a[maxn];
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
int t;
memset(a,0,sizeof(a));
for(int i=0;i<n;i++)
{
scanf("%d",&t);
a[500000+t]=1;
}
for(int i=1000001;m>0;i--)
{
if(a[i])
{
printf("%d",i-500000);
if(m>1)
printf(" ");
else
puts("");
m--;
}
}
}
return 0;
}