您的位置:首页 > 其它

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

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

下面介绍用两道题目介绍一下hash表的用法:

题目描述:给你n个整数,请按从大到小的顺序输出其中前m大的数。
Input
每组测试数据有两行,第一行有两个数n,m (0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的整数。
Output
对每组测试数据按从大到小的顺序输出前m大的数。
这个问题我们可以看到数据量很大而且整数处于[-500000,500000]之间,那么我们就可以用一个大的数组进行hash,然后进行统计。




#include
"
stdio.h
"

#include
"
memory.h
"

int
a[
1000001
];

int
main()

{

int
n,m;

int
tmp;

int
i;

int
count;

int
flag
=

0
;

while
(scanf(
"
%d%d
"
,
&
n,
&
m)
!=
EOF)

{

count
=

0
;

memset(a,
0
,
sizeof
(a[
0
])
*
1000001
);

for
(i
=

0
;i
<
n;i
++
)

{

scanf(
"
%d
"
,
&
tmp);

a[tmp
+
500000
]
=
1
;

}

flag
=

0
;

for
(i
=
1000000
;i
>=
0
;i
--
)

{

if
(a[i]
!=
0
)

{

if
(
!
flag)

{

printf(
"
%d
"
,i
-
500000
);

flag
=

1
;

}

else

{

printf(
"
%d
"
,i
-
500000
);

}

count
++
;

}

if
(count
==
m)

break
;

}

printf(
"
\n
"
);

}

return

0
;

}


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