哈希表:数组就是一张哈希表,可以通过索引来访问元素
一般哈希表都是用来快速判断一个元素是否出现集合里。
常见的三种哈希结构
array(数组)
set(集合)
map(映射)
242.有效的字母异位词
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
record = [0] * 26 #构造一个26个元素的数据,value初始化为0
for i in s:
record[ord('a')-ord(i)] += 1
for i in t:
record[ord('a')-ord(i)] -= 1
for i in record:
if i != 0:
return False
return True
349. 两个数组的交集
当value没有限制范围,适合用map求解,例如 [ 0, 5, 320000],需要开辟一个很大的数组空间
当0 < value < 1000,也可以用数组求解
class Solution:
def intersection(self, nums1: List[int], nums2: List[int]):
record = dict() # 创建一个空字典
result = [] # 存放结果
for i in nums1:
record[i] = 1 # nums1中的元素为key,value赋值为1
for i in nums2:
if i in record.keys() and record[i] == 1:
result.append(i)
record[i] = 0 # 保证重复的i不会再次进入循环
return result
python内置函数
class Solution:
def intersection(self, nums1: List[int], nums2: List[int]):
return list(set(nums1)&set(nums2))
202. 快乐数
class Solution:
def isHappy(self, n: int) -> bool:
# 计算平方和
def sum_square(n):
sum_num = 0
for i in str(n): # n转为字符串
sum_num += int(i)**2 # n转为数字
return sum_num
record = []
while sum_square(n) not in record: # 循环条件为 n的平方和 不在 record里
n = sum_square(n)
record.append(n)
if n == 1:
return True
else:
return False
1. 两数之和
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
record = {}
for index, value in enumerate(nums):
if target - value in record:
return([record[target - value],index])
record[value] = index # 字典中,key value互换位置,因为要返回下标
return []