代码随想录算法训练营第六天|242. 有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
【知识点】
1.当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。
2.哈希法也是牺牲了空间换取了时间,因为要使用额外的数组,set或者是map来存放数据,才能实现快速的查找。
3.三种常用数据结构:数组,set,map
242. 有效的字母异位词
【注意】
1.在hash值比较小,范围是可控(比较小):数组。
2.hash值很大的时候用set。
3.key:value:用map。
4.'a'在数组中相对位置为0,都和'a'进行运算,可得在hash数组中对应位置字母出现的频率。
【代码】
1 class Solution(object): 2 def isAnagram(self, s, t): 3 """ 4 :type s: str 5 :type t: str 6 :rtype: bool 7 """ 8 hash = [0] * 26 9 10 for i in s: #求出一个相对数值 11 hash[ord(i) - ord('a')] += 1 #ord()返回字符串的ASCII数值 12 for i in t: 13 hash[ord(i) - ord('a')] -= 1 14 for i in range(26): 15 if hash[i] != 0: 16 return False 17 return True
349. 两个数组的交集
【注意】
1.unorderset就是一个可以无限存装的一个数组。做映射效率高。 (存和读的效率最高)
2.直接使用set 不仅占用空间比数组大,而且速度要比数组慢,set把数值映射到key上都要做hash计算的。
【代码】
1 class Solution(object): 2 def intersection(self, nums1, nums2): 3 """ 4 :type nums1: List[int] 5 :type nums2: List[int] 6 :rtype: List[int] 7 """ 8 set1 = set(nums1) 9 set2 = set(nums2) 10 list1 = [] 11 12 for i in set2: 13 if i in set1: 14 list1.append(i) 15 16 return list1
方式二:
1 val_dict = {} 2 ans = [] 3 for num in nums1: 4 val_dict[num] = 1 5 6 for num in nums2: 7 if num in val_dict.keys() and val_dict[num] == 1: 8 ans.append(num) 9 val_dict[num] = 0 10 11 return ans
202. 快乐数
【注意】
1.sum是否重复出现,如果重复了就是return false。
【代码】
1 class Solution(object): 2 def isHappy(self, n): 3 """ 4 :type n: int 5 :rtype: bool 6 """ 7 def calculate_happy(num): 8 sum = 0 9 10 while num: 11 sum += (num % 10) ** 2 12 num = num // 10 13 return sum 14 15 #记录中间结果 16 record = set() 17 18 while True: 19 n = calculate_happy(n) 20 if n == 1: 21 return True 22 # 如果中间结果重复出现,说明陷入死循环了,该数不是快乐数 23 if n in record: 24 return False 25 else: 26 record.add(n)
1. 两数之和
【注意】
1.要将要查找的元素作为key,下标作为value。
【代码】
1 class Solution(object): 2 def twoSum(self, nums, target): 3 """ 4 :type nums: List[int] 5 :type target: int 6 :rtype: List[int] 7 """ 8 records = dict() 9 10 for index, value in enumerate(nums): 11 # 遍历当前元素,并在map中寻找是否有匹配的key 12 if target - value in records: 13 return [records[target - value], index] 14 records[value] = index #存储到map中 15 16 return []
分类:
代码随想录刷题记录
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?