哈希表
empty__barrel
这个作者很懒,什么都没留下…
展开
-
哈希表总结
一般来说哈希表都是用来快速判断一个元素是否出现集合里。哈希函数是把传入的key映射到符号表的索引上。哈希碰撞处理有多个key映射到相同索引上时的情景,处理碰撞的普遍方式是拉链法和线性探测法。接下来是常见的三种哈希结构:数组set(集合)map(映射)...原创 2022-02-25 20:46:43 · 257 阅读 · 0 评论 -
力扣:18.四数之和
力扣:18.四数之和题目:给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):0 <= a, b, c, d < na、b、c 和 d 互不相同nums[a] + nums[b] + nums[c] + nums[d] == target你可以按 任意顺序 返回答案 。解析:与上一题类原创 2022-02-16 16:01:52 · 354 阅读 · 0 评论 -
力扣:15.三数之和
将三个值分为两个值,a、b+c三指针一个指针作为初始值a,left 指针作为b,right 指针作为c。a指向第一个位置,left指向第二个位置,right指向末尾,然后将 left+right的值与 b+c 的标准值比较,left+right大则向左移动right,小则向右移动 left。若存在则放入容器中继续移动直到right = left。然后a指向第二个位置(小于0)继续下去。...原创 2022-02-16 15:15:50 · 616 阅读 · 0 评论 -
力扣:454.四数相加||
力扣:454.四数相加题目:给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:0 <= i, j, k, l < nnums1[i] + nums2[j] + nums3[k] + nums4[l] == 0解析:将四数化为两数,然后与上题类似操作。a、b、c、d,化为 a+b 、 c+d。统计所有可能 a+b 的结果以及次数入map中,然后依次遍历 c+d 的结果看与其互补的值在ma原创 2022-02-15 17:09:47 · 239 阅读 · 0 评论 -
力扣:两数之和
力扣:1.两数之和代码随想录解析题目:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。解析:添加与判断同步一边添加当前值到容器中,一边判断与当前值互补的值是否存在于容器中。此策略的实施结果就是:扫描到存在的一对值的第一个值不作为结果,扫描到第二个值是才将这一对作为结果。如果使用先全部添原创 2022-02-15 16:55:12 · 73 阅读 · 0 评论 -
力扣:202.快乐数
力扣:202.快乐数题目:编写一个算法来判断一个数 n 是不是快乐数。「快乐数」 定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1,那么这个数就是快乐数。如果 n 是 快乐数 就返回 true ;不是,则返回 false 。思路:单纯的判断结果的几种情况就行,通过容器来添加元素判断当前元素是否重复出现。代码:class Solution {public:int g原创 2022-02-15 15:54:05 · 197 阅读 · 0 评论 -
力扣:350.两个数组的交集 II
力扣:350.两个数组的交集 II题目:给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。思路:查找值的同时,若满足则还要比较此元素在两容器中出现的次数,多了则不填入目标容器中。(通过先记录元素在第一个数组中出现的次数,然后若在第二个数组中出现则次数–,次数值为0即大小比较的边界)。首先记录第一个数组的每个元素及出现的次数,然后依次判断第原创 2022-02-15 14:49:06 · 254 阅读 · 0 评论 -
力扣:349. 两个数组的交集
力扣:349. 两个数组的交集题目:给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。思路:将其中一个数组读入到一个set容器中,然后依次取另一个数组中的每一个元素看是否在此set容器中,若在则放入set2容器中,最后将set2容器中的元素放入vector容器中且返回。set容器的选择:std::set和std::multiset底层实现都是红黑树,std::unordered_set的底层实现是哈希表,使用u原创 2022-02-15 14:03:26 · 378 阅读 · 0 评论 -
力扣:438.找到字符串中所有字母异位词
力扣:438.找到字符串中所有字母异位词题目:给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。代码:方法①:int sLen = s.size(), pLen = p.size(); if (sLen < pLen) { return vector<int>(); } vect原创 2022-02-15 10:28:38 · 146 阅读 · 0 评论 -
力扣:49.字母异位词分组
力扣:49.字母异位词分组题目:给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。示例 1:输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]示例 2:输入: strs = [""]输出: [[""]]示例 3:输入:原创 2022-02-14 17:50:32 · 201 阅读 · 0 评论 -
力扣:383.赎金信
力扣:383.赎金信题目:给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。如果可以,返回 true ;否则返回 false 。magazine 中的每个字符只能在 ransomNote 中使用一次。代码跟上一章几乎是一样的:class Solution {public: bool canConstruct(string ransomNote, string magazine) { in原创 2022-02-14 15:54:26 · 144 阅读 · 0 评论 -
力扣:242.有效的字母异位词
力扣:242.有效的字母异位词题目:给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。解析:每一个字母都对应一个ASCLL码。可将字母转换成ASCLL码,因此字母也可以作为下标。第一个字符串中的字母填入:即将其对应索引对应的值+1第二个字符串中的字母的填入:即将其对应索引对应的值-1最后检查数组中元素是否都为0class Solution {public: bool原创 2022-02-14 15:45:06 · 326 阅读 · 0 评论 -
哈希表理论
索引函数:索引小标可以是名字等,通过索引小标来查找值。数组就相等于一个哈希表(只不过索引下标是数字)。一般哈希碰撞有两种解决方法, 拉链法和线性探测法。拉链法:小李和小王在索引1的位置发生了冲突,发生冲突的元素都被存储在链表中。 这样我们就可以通过索引找到小李和小王了线性探测法:要保证tableSize大于dataSize。 我们需要依靠哈希表中的空位来解决碰撞问题,放了小李,那么就向下找一个空位放置小王的信息常见的三种哈希结构:数组set (集合)map(映射)std::unorder原创 2022-02-14 13:00:24 · 137 阅读 · 0 评论