讲解
● 哈希表理论基础
● 242.有效的字母异位词
● 349. 两个数组的交集
● 202. 快乐数
● 1. 两数之和
题目链接:242. 有效的字母异位词
- 将字母转为哈希表位置,出现次数为数值
- 通过数值加减,判断字母数是否多出或少于
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
record = [0]*26
for zm in s:
record[ord(zm)-ord('a')] += 1
for zm in t:
record[ord(zm)-ord('a')] -= 1
for i in range(26):
if record[i] != 0:
return False
return True
题目链接:349. 两个数组的交集
- 将数组转为集合,去除重复数字后判断
class Solution:
def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
nums11 = set(nums1)
nums22 = set(nums2)
result = []
for num in nums11:
if num in nums22:
result.append(num)
return result
-
直接用集合运算
x = set(‘abracadabra’)
y = set(‘bgdhgds’)
x & y # 交集
x | y # 并集
x - y # 差集
class Solution:
def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
return list(set(nums1) & set(nums2))
题目链接:202. 快乐数
- 使用集合
class Solution:
def isHappy(self, n: int) -> bool:
recode = set()
while n != 1:
sum = 0
for i in str(n):
sum += int(i)**2
if sum in recode:
return False
recode.add(sum)
n = sum
return True
题目链接:1. 两数之和
- 使用index方法获取下标
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
for i in range(len(nums)):
num = target-nums[i]
if num in nums:
index = nums.index(num)
if i != index:
return [i,index]
- 使用set
- enumerate()内置函数
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
enumerate(sequence, [start=0])
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
dic = enumerate(nums)
saw = set()
for i,num in dic:
n1 = target - num
if n1 in saw:
return [nums.index(n1),i]
saw.add(num)