散列(数据结构上重点讲过)
大部分问题都会问:给出N个正整数,再给出M个正整数,问这M个数中每个数分别是否在N个数中出现过/出现的次数。
如果每个数都不超过10^5,可以直接作为数组下标是可行的。但输入如果是10^9大小的整数(例如 1111111111),甚至是一个字符串(例如“I LOVE YOU”),就不能直接将他们作为数组下标了。
这里介绍一种方法:可以将乱七八糟的元素转换成一个在能接收范围内的整数————散列。浓缩成一句话就是:将元素通过一个函数转换成整数,使得该整数可以尽量唯一地代表这个元素
除留取余法:H(key)= key % mod,通过这个散列函数,可以把很大的数转换为不超过mod的整数(注意:表长TSize必须不小于mod,不然会产生越界)。
后果:会有两个不同的数key1和key2,它们的hash值H(key1)和H(key2)是相同的,这种情况叫做“冲突”。
解决冲突的办法:
(1)
网友评论