![](https://img-blog.csdnimg.cn/20190927151043371.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
3.哈希表
文章平均质量分 77
哈希表算法学习
pig不会cv
这个作者很懒,什么都没留下…
展开
-
3.9三数之和(LC15_M)
给你一个整数数组nums,判断是否存在三元组满足i!= ji!= k且j!= k,同时还满足。请你返回所有和为0且不重复的三元组。答案中不可以包含重复的三元组。不同的三元组是 [-1,0,1] 和 [-1,-1,2]。注意,输出的顺序和三元组的顺序并不重要。[]唯一可能的三元组和不为 0。[[0,0,0]]唯一可能的三元组和为 0。原创 2024-08-09 14:31:30 · 664 阅读 · 0 评论 -
3.8四数之和(LC18-M)
这道题和三数之和很像,都是用假设 nums[k]+nums[i]+nums[left]+nums[right]=target只不过就是在i left right外面再加一层k的for循环。但是要注意剪枝和去重。比如对于k,当nums[k]>target and target>=0,这个时候肯定找不到符合条件的四元组了,return result比如对于k,当nums[k]==nums[k-1] continue。原创 2023-10-29 10:46:24 · 44 阅读 · 0 评论 -
3.7三数之和(LC15-M)
正常第一想法是用,用dict存储0-(b+c) (假设a+b+c=0)。然而,去重问题很难搞。比如,[-1,-1,0,0,1,1]。用哈希法遍历出来会得到:第一个-1遍历后的结果:[-1,0,1] [-1,0,1] [-1,0,1] [-1,0,1]第二个-1遍历后的结果:[-1,0,1] [-1,0,1] [-1,0,1] [-1,0,1]所以要去重。然而,把符合条件的三元组放进vector中,然后再去重,也是这道题目通过率如此之低的根源所在。原创 2023-10-28 15:05:25 · 28 阅读 · 0 评论 -
3.6赎金信(LC383-E)
这道题目和很像,相当于求 字符串a 和 字符串b 是否可以相互组成 ,而这道题目是求 字符串a能否组成字符串b,而不用管字符串b 能不能组成字符串a。本题判断第一个字符串ransom能不能由第二个字符串magazines里面的字符构成,但是这里需要注意两点。第一点“为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思” 这里说明杂志里面的字母不可重复使用。第二点 “你可以假设两个字符串均只含有小写字母。说明只有小写字母哈希法:因为题目说只有小写字母,那可以。原创 2023-10-27 12:10:28 · 32 阅读 · 0 评论 -
3.5四数相加(LC454-M)
当cd的下一轮循环中,c[1]+d[1]=-5,此时c[1]+d[1]+a[0]+b[0]=5,c[1]+d[1]+a[1]+b[1]=5,增加了两个组合,count应该继续加2。当我们需要查询一个元素是否出现过,或者一个元素是否在集合里的时候,就要第一时间想到哈希法。比如:a[0]+b[0]=5, a[1]+b[1]=5,则dict中dict[5]=2。此时,c[0]+d[0]=-5,那么循环到c[0]+d[0]时,count应该等于2。可把A和B看成一组,C和D看成一组。,并查询x出现的次数。原创 2023-10-25 16:04:16 · 34 阅读 · 0 评论 -
3.4两数之和(LC1-E-字典)
我们不仅要知道元素有没有遍历过,还要知道这个元素对应的下标,字典的每个键值 key:value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示:在本题中,key是我们要找的元素,value是它对应的下标dict用来存放我们遍历过的元素举例,输入=[2,7,3,6],target=9首先遍历到2,dict={},将2存放到dict中:dict={2:0}原创 2023-10-24 13:00:35 · 37 阅读 · 0 评论 -
3.3快乐数(LC202—E)
比如输入是19,第一轮result是82,第二轮还是82,所以直接返回false了。所以,只要不断得让得出来的商除10,余数就是我们要求的(循环终止条件:商=0)所以,应该改成 n=self.get_num(n),更新每一轮的n。不知道为什么会错,尝试把"result”改成"n",就不报错了。还有定义函数的时候,应该现有self,再写输入的参数变量。参数的作用是让方法能够访问和操作对象的属性和其他方法。` 参数,使得方法可以访问对象的属性和方法。的参数,它表示对当前对象的引用。这样在调用该方法时,原创 2023-10-23 11:06:36 · 36 阅读 · 0 评论 -
3.2两个数组的交集
综上所述,代码的总时间复杂度为 O(n1 + n2 + min(n1, n2) + k)。综上所述,代码的总空间复杂度为 O(n1 + n2 + min(n1, n2) + k)。无序的, 不可随机访问的, 不可重复的。原创 2023-10-22 17:54:14 · 31 阅读 · 0 评论 -
3.1有效的字母异位词
hash[26]存放第一个字符串中a-z字母出现的次数,当遍历第二个字符串的时候,对hash[26]做减法操作,若最后hash[26]中的元素都为0,则说明是有效的字母异位词;Unicode码是一种用于表示字符的标准编码系统,它为每个字符分配了一个唯一的整数值。的 Unicode 码值。Unicode 码是一种标准的字符编码系统,为每个字符分配了一个唯一的整数值。简而言之:两个字符串里面出现的每个字母的频率应该相同,若多出、少了字母,都不行。的一个子类,具有与普通字典相同的功能,但是在访问不存在的键时,原创 2023-10-21 20:02:19 · 39 阅读 · 0 评论 -
3.哈希表(Hash table,散列表)
当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法(查询O(1))。但是哈希法也是牺牲了空间换取了时间,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找。如果在做面试题目的时候遇到需要判断一个元素是否出现过的场景也应该第一时间想到哈希法!原创 2023-10-21 10:57:29 · 42 阅读 · 0 评论