leetcode哈希表篇总结

前言

哈希表的目的就是为了寻找元素的时间缩减为O(1).大大缩减查找的时间,对于某些题目是特别有效的. 可以作为哈希表的结构有三种:分别为数组,set容器,map容器.他们的选择是至关重要的.后面会介绍什么情况下选择什么哪一种容器.

哈希表类型

第一种:数组

数组最为哈希表是最省空间的,它作为容器有一个很特别的地方就是它的大小,数组我们用静态数组,没办法重新定义它的大小,所以不适合那些题目的长度不确定或者是长度过长的,比较适合的有26个字母组成的字符串或者小型的int数据.

这是我刷过用数组做哈希表的题

第二种:set容器

set容器可以用来快速查找key对应的value值,但是它只存了value值.对于不需要同时使用key和value,且无法用数组作为哈希表时,可以用set容器.还有一个特点就是set容器可以帮你去重,这在某些题可以省去麻烦的去重操作,

下面是我刷过的用set容器作为哈希表的题:

第三种:map容器

除了数组和set容器,还有一个map容器可以用来做哈希表.它最大的特点就是存储的是对组(pair),它可以同时存储key和对应的value.这在某些情况下比如记录这个数字出现的次数时很有用.

总结:

哈希表的容器选择是最重要的一环,

  • 数组如果数值小那么占用的空间和访问的时间都会比较小,但是它也受制于它大小,如果数值太多会使得占用空间太多.
  • set可以自动删除重复元素,但是它只能存放value.
  • map容器存储组元,可以同时存储key:value.但是相应的空间会更大.比较常出现在记录次数,

小tip:

还有一个比较有趣的地方就是如果遇到 A + B+ C + … + N = target时,先看题目要求是否需要去重,

  • 如果不需要去掉重复的,只需要个数的适合可以直接用
    – set容器
    – 对半分开个数(为了时间复杂度最低),然后上面一部分相加的结果压入一个unordered_map容器中,然后寻找有没有0-(b+c),有说明相加为0
  • 如果需要去重,
    – 可以直接压入set容器然后再转为结果,这样就可以删除重复元素.
    – 但还有一个时间复杂度较低的方法就是用定指针和移指针法.就是固定数量的指针,然后移动另外数量的指针.确保遍历整个数组,再给他加上去重条件,这样再遍历过程既可以节省时间,又可以去重操作.所以时间复杂度会比较低.

后续做到相关的题会继续更新.

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

公仔面i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值