代码随想录算法训练营第六天|哈希表理论基础,242.有效的字母异位词,349. 两个数组的交集,202. 快乐数,1.两数之和

发布时间 2023-12-18 22:17:10作者: amulet

一、哈希表理论基础

学习:

1. 哈希法
当需要查询一个元素是否出现过,或者一个元素是否在集合里,首选哈希法
2. 实现哈希法的3种数据结构
数组:在哈希值个数比较小且范围可采用

集合:在哈希值个数或者范围较大时可采用

map:当既需要key,又要value时可采用

二、242.有效的字母异位词

题目链接:

LeetCode 242.有效的字母异位词

学习前:

思路:

用两个HashMap分别储存s和t中每个字符对应出现的次数,比较value的值是否相同

时间复杂度:O(n) (O(3n))

空间复杂度:O(1)

学习后:

  • 因为字母个数确定只有26个,故用长度为26的数组去存储字符出现的次数,第一次加,第二次减,判断是否为0就可以
  • 降低了内存开销和运算复杂度

三、349. 两个数组的交集

题目链接:

LeetCode 349. 两个数组的交集

学习前:

思路:

定义两个集合HashSet,用一个存放nums1和nums2的差集,另一个即可获得nums1和nums2的交集,然后转换成int数组

时间复杂度:O(m+n) (O(4n))

空间复杂度:O(n)

学习后:

优化了差集,可直接求交集

四、202. 快乐数

题目链接:

LeetCode 202. 快乐数

学习前:

思路:

无。以为是数学推导,没想出来

时间复杂度:O()

空间复杂度:O()

学习后:

重点在于如果不是快乐数,计算的和会重复,即转化成查找某个元素是否出现,首选哈希法,又因为数字范围较大,采用set数据结构

五、1.两数之和

题目链接:

LeetCode 1.两数之和

学习前:

思路:

采用HashMap,key存放整数,value存放整数出现的次数,操作比较繁琐

时间复杂度:O(n) (O(3n))

空间复杂度:O(n)

学习后:

  • 采用HashMap,key存放整数,value存放整数对应的下标
  • 思路比较清晰且简单

六、学习总结

  1. 时间:3.5h
  2. 初步理解哈希法以及3种具体实现的数据结构