哈希表基础理论
https://programmercarl.com/哈希表理论基础.html#哈希表
242有效字母异位词题
https://leetcode.cn/problems/valid-anagram/description/
242代码随想录解析
https://programmercarl.com/0242.有效的字母异位词.html#算法公开课
349两个数组的交集https://leetcode.cn/problems/intersection-of-two-arrays/
349代码随想录解析
https://programmercarl.com/0349.两个数组的交集.html#算法公开课
202快乐数
https://leetcode.cn/problems/happy-number/
202代码随想录解析
https://programmercarl.com/0202.快乐数.html#其他语言版本
哈希表基础理论
当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法
python中重要和字典相关的语句
num = res.get(num,0)+1
##res.get(num,0) 如果存在num,则获取该数值,如果不存在该key,则赋值为0
242有效字母异位词
题目
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
题解
对于Python来说 有两种解决方案
- 直接采用python的collections.counter
- 采用哈希表 统计26字母的频次
解法代码
###解法一:counter
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
s_dict = dict(collections.Counter(s))
t_dict = dict(collections.Counter(t))
if s_dict==t_dict:
return True
else:
return False
##解法二
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
record = [0]*26 ##哈希表
for i in s:
record[ord(i)-ord("a")]+=1
for i in t:
record[ord(i)-ord("a")]-=1
for i in record:
if i!=0:
return False
return True
349两个数组的交集
题目
给定两个数组 nums1 和 nums2 ,返回 它们的 交集。
输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
题解:
- 采用字典和集合统计
- 直接使用集合
##用集合方法
class Solution:
def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
return list(set(nums1) & set(nums2))
快乐数
题目
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」 定义为:
对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
如果这个过程 结果为 1,那么这个数就是快乐数。
如果 n 是 快乐数 就返回 true ;不是,则返回 false。
题解
要点在如果不是快乐数,可能无限循环始终变不到1
因此,只需要判断结果是否有重复出现即可
解题代码
class Solution:
def isHappy(self, n: int) -> bool:
curr = n
res = {}
while curr!=1 and res.get(curr,0)<2:
num = 0
for i in str(curr):
num = num + int(i)**2
curr = num
res[num] = res.get(num,0)+1
if curr==1:
return True
else:
return False
标签:哈希,异位,训练营,随想录,快乐,dict,https
From: https://www.cnblogs.com/P201821440041/p/18233155