Hash表题目整数hash-HDOJ1425(转载)

来源:互联网 发布:魔兽月卡 知乎 编辑:程序博客网 时间:2024/06/06 02:07

哈希表(散列表)的基本原理:使用一个下标范围比较大的数组来存储元素,一般通过设计一个函数(哈希函数,即散列函数),使得每个元素的关键字都与一个函数值(即数组下标)相对应,然后用该数组单元来存储对应元素。

下面介绍用两道题目介绍一下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 else31 {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 }
复制代码

原创粉丝点击