一、哈希表理论基础
学习:
1. 哈希法
当需要查询一个元素是否出现过,或者一个元素是否在集合里,首选哈希法
2. 实现哈希法的3种数据结构
数组:在哈希值个数比较小且范围可采用
集合:在哈希值个数或者范围较大时可采用
map:当既需要key,又要value时可采用
二、242.有效的字母异位词
题目链接:
学习前:
思路:
用两个HashMap分别储存s和t中每个字符对应出现的次数,比较value的值是否相同
时间复杂度:O(n) (O(3n))
空间复杂度:O(1)
学习后:
- 因为字母个数确定只有26个,故用长度为26的数组去存储字符出现的次数,第一次加,第二次减,判断是否为0就可以
- 降低了内存开销和运算复杂度
三、349. 两个数组的交集
题目链接:
学习前:
思路:
定义两个集合HashSet,用一个存放nums1和nums2的差集,另一个即可获得nums1和nums2的交集,然后转换成int数组
时间复杂度:O(m+n) (O(4n))
空间复杂度:O(n)
学习后:
优化了差集,可直接求交集
四、202. 快乐数
题目链接:
学习前:
思路:
无。以为是数学推导,没想出来
时间复杂度:O()
空间复杂度:O()
学习后:
重点在于如果不是快乐数,计算的和会重复,即转化成查找某个元素是否出现,首选哈希法,又因为数字范围较大,采用set数据结构
五、1.两数之和
题目链接:
学习前:
思路:
采用HashMap,key存放整数,value存放整数出现的次数,操作比较繁琐
时间复杂度:O(n) (O(3n))
空间复杂度:O(n)
学习后:
- 采用HashMap,key存放整数,value存放整数对应的下标
- 思路比较清晰且简单
六、学习总结
- 时间:3.5h
- 初步理解哈希法以及3种具体实现的数据结构