哈希表的基础

系列文章目录

hash表的实现

哈希表(散列表)的实现数据结构有三种:数组、集合和映射
数组:利用数组的索引下标;
集合(set):set和multiset的底层实现是红黑树,所以key值有序,unordered_set的底层实现是hash表,查询和增删效率为O(1);
映射(map):map和multimap的底层实现是红黑树,所以key值有序,unorfered_map的底层是hash表,查询和增删的效率都为O(1);

在选用数据结构时要考虑:是否要求集合有序、是否要求有重复数据等,

hash解决的问题

1、判断某个元素是否出现在集合中

经典题型

数组作为hash表:

题目特点:个数有限(因为数组大小不是无限开辟的)
有效的字母异位词
赎金信问题
缺点:
当题目没有限制元素或者数值的大小时,无法使用数组做hash表;
当hash值少、分散并且跨度大时,也不建议使用数组,造成数组空间的浪费;

unordered_set作为hash表:

题目特点:去重、无序
两个数组的交集
快乐树
缺点:set 不仅占用空间比数组大,而且速度要比数组慢,set把数值映射到key上都要做hash计算的
set是一个集合,只能存放一个key值;

unordered_map作为hash表:

特点:不仅要存放元素,还要存放索引,也就是key-value结构
不需要key有序、
两数之和
四数相加II

三数之和不能够用hash表,
四数之和和三数之和一个思路,都是使用双指针法

参考文献:

  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值