-
当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法 。 这句话很重要,大家在做哈希表题目都要思考这句话。
Leetcode:242.有效的字母异位词
- 涉及哈希的3个数据结构:数组,set,map
- 数组(key连续+范围可控),set(key范围很大),map(key对应value)
- Python定义有初始值的数组:hash = [0]*26
- ord('a')获取ASCII:在Python中,
s[i]-'a'
这样的表达式会导致TypeError,因为Python不允许直接将字符(str
类型)与字符串(str
类型)进行减法运算。正确的做法是使用ord(s[i]) - ord('a')
来获取字符对应的ASCII值之差
Leetcode: 349. 两个数组的交集
完整答案
def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
set1 = set(nums1)
res = set()
for num in nums2:
if num in set1:
res.add(num)
return res
- 本题如无“key<1000”这一条件,则只能用set;当有了这一条件,则数组和set都可以用,从效率&性能上来说,数组优于set.
- 我们选择set最为存储结果的数据结构,是看重其“去重”的功能。
- Python统一记忆:元组( ),列表[ ],字典和集合{ }。记忆,字典最大最多(包含一切汉字)的集合,所以用大括号。但需要注意的是,字典是键值对,集合是单个元素。
- 集合(set)是一个无序的不重复元素序列。集合中的元素不会重复,并且可以进行交集、并集、差集等常见的集合操作。可以使用大括号 { } 创建集合,元素之间用逗号 , 分隔, 或者也可以使用 set() 函数创建集合。
- 集合(set): set1 = {1, 2, 3, 4};集合初始化:res = set()
- 字典:d = {key1 : value1, key2 : value2 }
- ——————————
- 思路分析:本题用到了哈希表集合set。本题代码随想录给出的解法1,适应了字典和集合两种,其实没必要,全部用set就好。set本身就是一种哈希表数据结构。
- 程序中,我们使用哈希表数据结构(set)而不用列表list的原因是,哈希表数据结构的查找效率是O(1)非常高效。
-
使用set作为输出数据结构的原因是,题干输出的结果要求“不可重复”,而set本身就是一个无序不重复的数据结构,天然帮助我们去重了。