哈希算法的简介:
哈希查找算法是使用哈希函数来计算一个键值对应的地址,建立哈希表后利用哈希函数来查找到各个键值存放在表格中的地址。也就是说,把一些复杂的数据,通过函数的某种映射,映射成更加易于查找的方式。
哈希表的概念:
哈希表是存储键值和键值所对应地址的一种数据集合。哈希表中的位置,一般称为槽位,每个槽位都能保存一个数据元素并且使用一个整数命名(从0开始)
举栗子
设定一个整数数组nums=[2,7,8,9,13],再设定一个目标值target=10,我们需要找出数组中哪两个数相加的和与我们设定的目标值10相等?找出这两个数,并且返回他们的下标。
? ? ?
? ? ? ? ? ? ? 0? ? ? 1? ? ? 2? ? ? 3? ? ? ?4 | | nums=? ?2? ? ? 7? ? ? 8? ? ? 9? ? ? 13? ? ? ? ? target=10 | | | | key? ? ? ? 2? ? ? 7? ? ? ?2? ? ? ? 9? ? ?13 | | value? ? ?0? ? ? 1? ? ? ? 2? ? ? ?3? ? ? 4 | |
例子解析:
因为2之前没有元素,相对应,因此直接将2与它的下标0写去哈希表中;
接下来的元素是7和他对应的元素target=10,那么10-7=3,因为3不在哈希表中所以将7以及它的1写入哈希表中;
下面列表遍历到的元素为8,因为target=10,那么10-8=2,2存在于哈希表中,那么2和8就是我们要找的元素,这两个元素分别对应的键值为0和2那么就会返回数组[0,2]
class Solution():
def towSum(self,list,target):
Hashtable=dict() #创建哈希列表
for i,num in enumerate(list): #遍历列表
if target-num in Hashtable: #检测target-num在不在哈希表中
return [Hashtable[target-num],i] #如果再返回对应的下标
Hashtable[list[i]]=i #把num列表的元素添加到哈希表中
return [] #不存在返回空列表
#检验
s=Solution()
num=[2,7,8,9,13]
cn=s.towSum(num,10)
print(cn) #打印输出
·时间复杂度: O(N)
·空间复杂度: O(N)
|