242.有效的字母异位词
建议: 这道题目,大家可以感受到 数组 用来做哈希表 给我们带来的遍历之处。
题目链接/文章讲解/视频讲解: https://programmercarl.com/0242.有效的字母异位词.html
思考
很简单的一道题,需要记住python获取ascii值的函数时ord()
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
s_dict = [0] * 26
t_dict = [0] * 26
for c in s:
s_dict[ord(c)-ord('a')]+=1
for c in t:
t_dict[ord(c)-ord('a')]+=1
for i ,j in zip(s_dict,t_dict):
if i!=j:
return False
return True
349. 两个数组的交集
建议:本题就开始考虑 什么时候用set 什么时候用数组,本题其实是使用set的好题,但是后来力扣改了题目描述和 测试用例,添加了 0 <= nums1[i], nums2[i] <= 1000 条件,所以使用数组也可以了,不过建议大家忽略这个条件。 尝试去使用set。
题目链接/文章讲解/视频讲解:https://programmercarl.com/0349.两个数组的交集.html
思考
很简单的题目,但是要记住set的一些用法。
#增
set.add(elmnt)
#删
set.discard(value)
#差集(返回在set1中,但不在set2的元素)
set1.difference(set2)
#或者
set1-set2
#交集
set1 & set2
#或者
set1.intersection(set2)
class Solution:
def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
return list(set(nums1) & set(nums2))
202. 快乐数
建议:这道题目也是set的应用,其实和上一题差不多,就是 套在快乐数一个壳子
题目链接/文章讲解:https://programmercarl.com/0202.快乐数.html
思考
不快乐的数,会陷入死循环,死循环的表现就是会重复出现已经出现过的数。
def mysum(n):
res = 0
while n:
res+= (n%10)**2
n = int(n / 10)
return res
class Solution:
def isHappy(self, n: int) -> bool:
res_set = set()
res_set.add(n)
while True:
n = mysum(n)
if n == 1 :
return True
if n in res_set:
return False
else:
res_set.add(n)
1. 两数之和
建议:本题虽然是 力扣第一题,但是还是挺难的,也是 代码随想录中 数组,set之后,使用map解决哈希问题的第一题。
建议大家先看视频讲解,然后尝试自己写代码,在看文章讲解,加深印象。
题目链接/文章讲解/视频讲解:https://programmercarl.com/0001.两数之和.html
思考
两数之和,用哈希来把遍历过的元素存起来,查找时复杂度O(1)。不然需要再用一个for循环,哈希相当于少了一层for循环的计算量。
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
num_dict = {}
for i in range(len(nums)):
if (target -nums[i]) in num_dict and i != num_dict[target -nums[i]]:
return [i,num_dict[target -nums[i]]]
else:
num_dict[nums[i]] = i
标签:202,return,int,res,set,dict,讲解,Day,两数
From: https://www.cnblogs.com/forrestr/p/18216823