题目要求:给定n个整数,按从大到小的顺序输出其中前m大的数。对于这类题目,一般人的第一想法都是,按排序,再取前m个数。但这时需要考虑题目所给定的时间限制和内存限制。最高效的方法还是使用hash,以数为数据的下标,就可以统计每个分数的数量,下标从小到大排列,如果不为0则输出,直到输出完毕。代码如下:
#include <iostream>
#include <stdlib.h>
using namespace std;
#define offset 500000
void main()
{
int n,m;
long int hash[100001] = {
0};
while (scanf("%d"