哈希
c葱c
这个作者很懒,什么都没留下…
展开
-
leetcode 350. 两个数组的交集 II
【代码】leetcode 350. 两个数组的交集 II。原创 2023-05-16 10:00:36 · 212 阅读 · 0 评论 -
438. 找到字符串中所有字母异位词 ( 滑动窗口
【代码】438. 找到字符串中所有字母异位词 ( 滑动窗口。原创 2023-05-15 10:39:35 · 238 阅读 · 0 评论 -
leetcode 49. 字母异位词分组
用的是map,第一个类型是string,表示出现的字符串。第二个类型是vector<string>,表示对应字符串出现的集合。注意:这里第一个类型string,是经过排序的。最后再用一个二维数组,接住map中的 second。时间复杂度是: O(n * k* logk)。这个是看题解的,更很快,没有用到排序。时间复杂度是: O ( N * K)原创 2023-05-15 09:24:06 · 190 阅读 · 0 评论 -
leetcode 217. 存在重复元素 ( 排序 + 哈希
时间复杂度: nlogn -----> sort带来的。主要思路就是 用哈希法检查该元素以前是否出现过。空间复杂度: n -----> 开了一个set。时间复杂度: n ------> 遍历带来的。原创 2023-05-07 10:45:19 · 51 阅读 · 0 评论 -
总结 哈希
因为我们不但要知道这个数,同时要知道这个数的下标。因为题中只有小写字母,并且可以用字母来和下标做映射。要存和,同时要存和出现的次数,出现几次代表有几组 count += value。哈希我觉得难点在于:如何想到利用某个元素是否出现过,来用哈希解决。数据比较分散,用数组的话,需要用下标来做映射。两个数组之和,和两数之和的想法类似。已知和,判断另一个数是否出现过。就相当于判断一个数是否出现过,使用哈希!和上一题类似,先排序,用两个for。可以把该题看作是,我已知一个数,已知和,求另一个数是多少。原创 2023-03-22 09:32:20 · 26 阅读 · 0 评论 -
leetcode 15. 三数之和
一开始完全想不到双指针可以这样用。因为这里是求,三个数相加。两个指针怎样处理三个数?这里就是巧妙用了一个for循环,来代替一个指针,主要需要移动的是循环内的指针。这里是三个数组,我一开始想的思路没啥大问题。就是先算两个数的和,但注意,这里。,因为这是在同一个数组中进行操作的。这里的去重比较麻烦。呵呵,不过下次遇到我一定可以的。哈希法的思路是ok的。原创 2023-03-21 15:43:26 · 36 阅读 · 0 评论 -
leetcode 383. 赎金信
对同一个数组进行操作。先遍历 mbalbalbal ,让它 ++ ,再遍历 rbalbalbala 让它--。如果 r 中出现的数,在m中没有出现过,那必然会出现 负数 ,那最后我们只需要判断数组中是否存在负数就可。继删除一个链表的倒数第 n 个结点,这是独立完成的第二题!关键在于翻译题目:一个数组里面的。思路:就和有效字母异位差不多。,是否在另一个数组中出现过。原创 2023-03-21 14:32:24 · 102 阅读 · 0 评论 -
leetcode 454.四数相加II
将 num1 数组 与 num2 数组 之间的元素之和算出来放到map中,在遍历 num3 和 num4之和。依据 这个和去查找,是否map中出现了,能让和为0的数。如果找到了对应的key,那么key 对应的 value 就表示出现了几次。所以 count += value。卡住的点:题目给了四个数组,我只会处理两个数组之间的查找。1. key 和 value 需要放什么进去。key就不用说了,放的是元素之和。因为出现了多少次,我们就找到几组。2. count 应该怎么变?原创 2023-03-21 14:23:16 · 57 阅读 · 0 评论 -
leetcode 1. 两数之和
本题在遍历数组的时候,例如当遍历到 2 时,我们想知道是否出现过 与 2 的合是target的数字。遍历数组,每遍历一个元素,就去map里查找是否出现过 可以与该元素相加 合为 target的值。如果没有,则将该元素插入。返回的时,数,和这个数的下标。我们不需要其中的元素有序,也不需要让元素多次存在。我们需要寻找的是元素,元素的值!不是元素的下标,所以自然让key存放的是元素的值。2.如果查询到了,返回的是迭代器,指向该元素。输入:nums = [2,7,11,15], target = 9。原创 2023-03-20 17:28:42 · 40 阅读 · 0 评论 -
leetcode 202. 快乐数
2.在循环的时候,记得要用 sum 来不断代替 n ,也就是 n = sum。n 代表的是下一个拿去求 sum 的数,是不断在变化的。是如何发现这个规律的呢?建议还是动手多算一下,就发现了。我第一次写懒了一下,就推不出来无限循环的条件是什么。所以一点思路都没有。判断一个数是否出现过,这里就自然想到了哈希方法。这里采用set,用set 的原因是数据比较离散。用数组的话,浪费空间。1. 要清楚如何拆分一个数 n % 10 取末尾,n / 10 取商。知道了这些,才知道如何求sum。原创 2023-03-20 16:20:47 · 35 阅读 · 0 评论 -
leetcode 349. 两个数组的交集
思路:先将一个数组转换程 set 达到去重的效果,再遍历另一个数组,来查找是否在哈希表中出现,如果出现,就插入到res(我们定义的unordered_set,用来存放结果)。3.容器之间的转化 unordered_set num_set(num1.begin() , num1.end());2.学到了三个函数 find(x) 查找 x 是否在set中出现过。1. 定义一个set unorder_set res;也可以用数组来解决,方法和上一题差不多,用下标来映射。原创 2023-03-20 15:37:15 · 55 阅读 · 0 评论 -
leetcode 242.有效的字母异位词
这个s[i] - 'a' 其实就是为了让 字母 a - z 一一映射在 0 - 25 这个范围。2. 在进行这个“hash [ s[i] - 'a' ]”的时候,个人觉得很像桶排序里的操作。在C++中,哈希其实是一种方法。1. 记得要给数组初始化,不然后面判断是否为 0 的时候,就会出现错误。先用一个循环,记录下其中一个数组在哈希表中的映射情况 ++再用另一个循环,使用 -- 来对之前的操作进行抵消。在我目前的理解中,哈希表 的好处就是:是否出现过。map 是有键值对的时候使用。原创 2023-03-20 14:48:20 · 61 阅读 · 0 评论