排序取前m大的数

题目描述:

  给你n个数,请按从大到小的顺序输出前m大的数,第一行两个数你,m(0<n,m>1000000),第二行n个各不相同,都处于[-500000,500000]的整数

输入样例:

5 3

3 -35 92 213 -644

输出样例:

213 92 3

#define offest 500000
int hash[1000001];
int main()
{
    int n,m;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        for(int i=-500000;i<500000;i++)
        {
            hash[i+offest]=0;
        }
        for(int i=1;i<=n;i++)
        {
            int x;
            scanf("%d",&x);
            hash[x+offest]=1;
        }
        for(int i=500000;i>-500000;i--)
        {
            if(hash[i+offest]==1)
            {
                printf("%d",i);
                m--;
                if(m!=0) printf(" ");
                else
                {
                    printf("\n");
                    break;
                }
            }
            
        }
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/womendouyiyang/p/11666768.html