哈希表【leetcode】

笔记:代码随想录

理论

概念

哈希表(hash table,散列表):是根据关键码的值而直接访问的数据结构,说白,数组就是一张哈希表。要枚举的话时间复杂度是O(n),但如果使用哈希表的话, 只需要O(1)就可以做到。

哈希函数:把变量直接映射为表上的索引。

哈希碰撞:不同变量映射到同一个索引位置。解决方法:拉链法,线性探测法。

哈希结构分类:数组,set集合,map映射(遇到哈希问题可随时切换)

快乐数:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为  1,那么这个数就是快乐数。

作用

快速判断一个元素是否出现在集合里,但也是牺牲空间换取时间,因为也是需要额外的数组,set或map来存放。

使用

1.关于set,C++提供了三种可用的数据结构:std::set(红黑层),std::multiset(红黑层),std::unordered_set(哈希层)map同理。

2.数组简单有效。但空间有限,受到栈空间的限制(不是数据结构的栈)。数组值大小受限,能用是因为题目限制了数值的大小。哈希值分散时,使用数组造成空间浪费。

3.set的空间消耗比数组大,set把数值映射到key是要做hash运算的,且要维护底层。

Leetcode

用数组(省内存,超限的用不了),字典(拥有健值优势),集合(无序)的不同特性。

1.有效的字母异位词 

数组

2.两个数组的交集

字典,使用哈希表存储一个数组中的全部元素。

3.快乐数

集合

4.两数之和

字典

5.四数相加

字典

6.赎金信

数组经典场景。

7.三数之和

排序后双指针法的三指针应用

8.四数之和

双指针法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值