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 <stdio.h> #include <string.h> #include <stdlib.h> #define base 500000 int hash_[1000001] = {0}; int main(){ int n, m; while(scanf("%d%d", &n, &m)==2) { memset(hash_,0,sizeof(hash_)); for(int i = 0; i < n; i++){ int temp; scanf("%d", &temp); hash_[base+temp] = 1; } int flag=1; for(int i = 1000000; i > 0; i--) { if(hash_[i] > 0) { m--; if(flag==1) { printf("%d", i - base); flag=0; } else printf(" %d", i - base); } if(!m){ printf("\n"); break; } } } return 0; }