wuyijia

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

代码随想录算法训练营第六天|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 []
复制代码

 

posted on   小吴要努力  阅读(10)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示