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
;
}
下面介绍用两道题目介绍一下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
;
}
相关文章推荐
- Hash表题目整数hash-HDOJ1425(转载)
- HDOJ 1425 sort hash(雾)
- HDOJ1425 sort(最简单的hash)
- HDOJ1496 Equations(整数hash)
- HDOJ 题目1496 Equations(hash)
- 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】
- hdoj1425sort【hash】
- HDOJ 题目1158Employment Planning(DP)
- 2014百度面试题目---“求比指定整数大且最小的不重复数”解答
- 实验 6 数组1题目1、输入n个整数,将它们存入数组a中。输出最大值和它所对应的下标
- //1.调整数组使奇数全部都位于偶数前面。 //题目: //输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。
- HDOJ 题目1054 Strategic Game(二分图最大匹配)
- 【题目39】整数集合的并差交集
- HDOJ 题目1573 X问题(中国剩余定理,拓展欧几里得)
- HDOJ 题目3555 Bomb(数位DP)
- HDOJ 题目2438 Turn the corner(三分搜索)