哈希表

哈希表

散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数。

1.哈希表是一种数据结构。

2.用哈希表和数组对比学习,数组中存放的是单独的数据(类似于函数中的y),而哈希表存放的是键值对(类似于函数中的(x,y)),键值对由两部分构成,分别为key(关键值)和value(数值),key对应函数中的x,value对应函数中的y,我们根据哈希函数也就是函数中的f(x)来通过key寻找value。

3.根据例题来进一步理解:

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/two-sum著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

用哈希表法求解:我们要求两个数的和为9,只需要把每个数放入表中,然后检查 target-目标数值是否在表中就可以了。

以为我们最终结果为两个数组的下标,如[0,1] 所以我们把数组下表设置为value,我们通过num数值来确定该数值对应数组的下标是否满足我们的要求,所以是通过数值num来确定结果,所以我们把num定位关键值key。

对于例题:

开始阶段,哈希表中为空,计算target-2=6,由于哈希表中为空白(没有key=6),所以将数值2和数组下标0(key=6,value=0)放入表中

key2   
value0   

 

接下来,计算target-7=2,比较后得出2在哈希表中,所以返回key=2的value值0以及当前数值得下标1,也就是[0,1].

4.进一步讨论,如果题目条件变更,允许两个7存在,如nums=[2,7,7],该如何存放,这一类问题被称为哈希冲突

解决方法有两种:一是开放寻址法,二是拉链法。

开放寻址法就是如果位置被占了,那找其他的位置呢,这里 很多的实现方法, 最基本的就是看该位置的后一个位置是否可用,也就是1的位置被占用了,就看2的位置,如果没有被占用,那就放到这里,如果2的位置也被占用了,那就继续往下看3的位置,依次类推,直到找到空位置。

拉链法就是在存储键值对的同时多存储一个next指针,这个指针指向第二个结果,第二个结果的指针指向第三个结果以此类推。也就是说,key=7对应的value不仅仅是1了,他还对应next指针指向的数值,如果我们把第二个7存储在下标2处那指针就指向2,如果存在下标等于n处,那指针指向n

key27
value01
next ——>
key 7
value 2
next ....

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值