哈希表知识总结

哈希表理论基础

  1. 用于判断一个元素是否在一个集合里
  2. 哈希函数:hashcode是通过特定编码方式,可以将其他数据格式转化为不同的数值,这样就把数据映射为哈希表上的索引数字了
  3. 哈希碰撞:有两个数据映射到同一个索引位置了。
    解决办法:
    1)拉链法:发生冲突的元素都被存储在链表,要选择适当的哈希表的大小,这样既不会因为数组空值而浪费大量内存,也不会因为链表太长而在查找上浪费时间
    2)线性探测法:要保证tableSize大于dataSize。 发生索引冲突,就向下找一个空位来放置数据。
  4. 哈希结构:
    1)数组list()
    2)集合set()
    3)映射dict()
  • python中列表、元组、集合、词典的区别
    |数据类型|是否有序|是否可重|是否可修改|表达|
    |–|–|–|–|–|
    | 列表 | 有序 | 可重复 | 可改 | a=list()或a=[] |
    | 元组 | 有序 | 可重复 | 不可改 | a=tuple()或a=() |
    | 集合 | 无序 | 无重复 | 可改,但无索引 | a=set()或a={1,2} |
    | 字典 | 无序 | 无重复 | 可改,有索引 | a=dict()或a={}或a={‘a’:1} |

哈希表经典题目

数组作为哈希表

数组就是简单的哈希表,但是数组的大小是受限的
有效的字母异位词
赎金信
res=[0]*26,先遍历数组1,小标是数组1的元素,value是出现次数;异位词是最后res元素出现不为0,表示不是异位词;赎金信是最后res元素出现小于0,表示不能组成赎金信。

set作为哈希表

两个数组的交集
没有限制数值的大小,用set

dict作为哈希表

两数之和
数组局限:数组大小受限
set局限:里面放的元素只能是一个key
dict优势:适合需要记录key-value的情况
用key保存值,value保存下标

三数之和
四数之和
用双指针法:i,left=i+1,right=len(nums)-1,
sum=nums[i]+nums[left]+nums[right]
当sum>0,右指针左移
当sum<0,左指针右移
当sum=0,记得处理nums[left]、nums[right]去重问题。
nums[i]的去重,i>0 and nums[i]==nums[i-1],continue

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值