Hash表题目整数hash-HDOJ1425(转载)
2013-09-05 09:19
344 查看
哈希表(散列表)的基本原理:使用一个下标范围比较大的数组来存储元素,一般通过设计一个函数(哈希函数,即散列函数),使得每个元素的关键字都与一个函数值(即数组下标)相对应,然后用该数组单元来存储对应元素。
下面介绍用两道题目介绍一下hash表的用法:
题目描述:给你n个整数,请按从大到小的顺序输出其中前m大的数。
Input
每组测试数据有两行,第一行有两个数n,m (0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的整数。
Output
对每组测试数据按从大到小的顺序输出前m大的数。
这个问题我们可以看到数据量很大而且整数处于[-500000,500000]之间,那么我们就可以用一个大的数组进行hash,然后进行统计。
下面介绍用两道题目介绍一下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 }
相关文章推荐
- Hash表题目整数hash-HDOJ1425(转载)
- HASH 题目汇总 转载自hqd_acm 膜拜hqd神牛
- HDOJ 题目4334 Trouble(hash)
- hdu 题目1496 Equations , POJ 题目1840 Eqs (整数Hash)
- HDOJ 题目3833 YY's new problem(hash)
- HDOJ1425 sort(最简单的hash)
- HDOJ1425 sort【Hash】
- hdoj1425sort【hash】
- HDOJ1496 Equations(整数hash)
- HDOJ 1425 sort hash(雾)
- HDOJ 题目1496 Equations(hash)
- HDOJ 题目分类
- 转载一个图数据结构题目
- HDOJ 题目1088 滑雪(DFS,记忆化)
- 【转载】经典.net面试题目【为了笔试。。。。。】
- HDOJ 入门级深搜DFS 题目汇总,持续更新中,一路打怪升级
- 【转载】poj 图论题目列表
- 本文所有13道算法题目 转载
- (精)hdoj 2109(注意整数的排序函数)
- 题目:返回一个整数数组中最大子数组的和。