Hash表题目整数hash-HDOJ1425(转载)
哈希表(散列表)的基本原理:使用一个下标范围比较大的数组来存储元素,一般通过设计一个函数(哈希函数,即散列函数),使得每个元素的关键字都与一个函数值(即数组下标)相对应,然后用该数组单元来存储对应元素。
下面介绍用两道题目介绍一下hash表的用法:
题目描述:给你n个整数,请按从大到小的顺序输出其中前m大的数。
Input
每组测试数据有两行,第一行有两个数n,m (0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的整数。
Output
对每组测试数据按从大到小的顺序输出前m大的数。
这个问题我们可以看到数据量很大而且整数处于[-500000,500000]之间,那么我们就可以用一个大的数组进行hash,然后进行统计。
1 #include "stdio.h"
2 #include "memory.h"
3 int a[1000001];
4 int main()
5 {
6 int n,m;
7 int tmp;
8 int i;
9 int count;
10 int flag = 0;
11 while(scanf("%d%d",&n,&m)!=EOF)
12 {
13 count = 0;
14 memset(a,0,sizeof(a[0])*1000001);
15 for(i= 0;i<n;i++)
16 {
17 scanf("%d",&tmp);
18 a[tmp+500000]=1;
19 }
20 flag = 0;
21 for(i=1000000;i>=0;i--)
22 {
23 if(a[i]!=0)
24 {
25 if(!flag)
26 {
27 printf("%d",i-500000);
28 flag = 1;
29 }
30 else
31 {
32 printf(" %d",i-500000);
33 }
34 count++;
35 }
36
37 if(count==m)
38 break;
39 }
40 printf("\n");
41 }
42 return 0;
43
44 }

浙公网安备 33010602011771号