您的位置:首页 > 其它

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,然后进行统计。

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 }


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: