哈希表
哈希映射
快速判断一个元素是否出现集合里
实现形式: 数组,字典,集合
242. 有效的字母异位词
为26个字母创建哈希数组
def isAnagram(self, s: str, t: str) -> bool:
word_s = [0] * 26
word_t = [0] * 26
if len(s) != len(t):
return False
for i in range(len(s)):
word_s[ord(s[i]) - ord("a")] += 1
word_t[ord(t[i]) - ord("a")] += 1
return word_s == word_t
更好的判断方式
def isAnagram(self, s: str, t: str) -> bool:
word_s = [0] * 26
if len(s) != len(t):
return False
for i in range(len(s)):
word_s[ord(s[i]) - ord("a")] += 1
word_s[ord(t[i]) - ord("a")] -= 1
for i in range(26):
if word_s[i] != 0:
return False
return True
349. 两个数组的交集
用set()的并集操作
list(set(nums1) & set(nums2))
字典构建哈希表
def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
inter = {}
res = []
for n1 in nums1:
inter[n1] = 1
for n2 in nums2:
if n2 in inter.keys() and inter[n2] == 1:
res.append(n2)
inter[n2] -= 1
return res
202. 快乐数
存储循环过程中的结果
如果结果存在,说明陷入死循环
注意while的条件
def isHappy(self, n: int) -> bool:
sum_set = {}
while n:
res = 0
if n in sum_set.keys():
return False
else:
i = n
while i:
res += (i % 10) ** 2
i = i // 10
if res == 1:
return True
sum_set[n] = res
n = sum_set[n]
if n == 1:
return True
else:
return False
1. 两数之和
边遍历边用dict存储{value:下标}
用target-当前值 查询获取下标返回
def twoSum(self, nums: List[int], target: int) -> List[int]:
n = len(nums)
n_dict = {}
for i in range(n):
added = target - nums[i]
if added in n_dict.keys():
return [n_dict[added], i]
n_dict[nums[i]] = i