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

发布时间:2016-12-11 12:33:24 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"Hash表题目整数hash-HDOJ1425(转载)",主要涉及到Hash表题目整数hash-HDOJ1425(转载)方面的内容,对于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 }

上一篇:一个字符串拼接的算法问题
下一篇:BindingSource控件介绍

相关文章

相关评论