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 }
复制代码

 

你可能感兴趣的:(hash表)