哈希
文章平均质量分 54
哈希
山顶夕景
实践出真知
展开
-
【LeetCode146】LRU缓存机制(list+unordered_map)
文章目录1.题目2.思路伪代码如下:3.代码(C++)4.注意点(1)写法一(2)写法二reference1.题目2.思路首先读懂题意:首先缓存最大容量初始化为capacity这么大,然后实现:put(key,val)存入键值对;get(key)获得键key对应的值val,如果键key不存在则返回-1。为了实现O(1)的时间负责度进行get和put。使用哈希链表的组合——哈希表查找快,链表插入快但查找慢。借用labuladong的一张图:其中双向链表可以使用list容器实现。伪代码如下原创 2021-04-04 17:06:35 · 869 阅读 · 0 评论 -
【Leetcode653】二叉搜索树中两个节点之和(基础题,dfs+哈希)
基础题,二叉树版本的两数之和,dfs遍历这棵二叉搜索树,比如当前节点数值为val,那么就查哈希表key为k - val的键值对是否存在,如果存在则显然说明存在题目说的两个节点,如果不存在不能直接说明没这样的节点(因为可能这对节点才刚出现一个),而是存入该哈希表后继续遍历二叉树。实现中可以用集合set代替哈希表HashMap,速度会快一丢丢。原创 2022-09-17 17:35:14 · 653 阅读 · 0 评论 -
【LeetCode350】两个数组的交集II(哈希表HashTable)
最简单的方法是哈希表,分别统计2个数组的哈希表,key为对应的元素,value为元素的个数,然后比较两个哈希表的key是公共时,取对应的最小value。原创 2022-09-04 23:50:33 · 494 阅读 · 0 评论 -
【LeetCode36】有效的数独(哈希表)
一、题目二、思路从左往右,从上往下遍历给定的二维数组board,然后遍历到当前元素board[i][j]时,需要判断是否满足题目的3个条件,这里可以分别用3个哈希表实现:在第 i 个行中是否出现过:使用row[9][10],注意第二维度是装的数字,即哈希表的key为数字(1-9范围内),value为是否出现过,出现过则为1(此时就直接返回false了),没出现过即保持为0(事后要置为1)。在第 j 个列中是否出现过:使用col[9][10]在第 j/3 + (i/3)*3个box中是否出现原创 2022-03-09 20:44:21 · 722 阅读 · 0 评论 -
【LeetCode219】存在重复元素 II(哈希表)
一、题目二、思路和代码哈希。mp[i]=j表示数字i在原数组的下标。一次遍历判断即可。PS:unordered_map的mp.find(value)返回的是value对应的key值。一开始这样提交,发现下面的方法有3个测试用例没过,比如[1, 0, 1, 1] k = 1这种情况,发现正确应该是返回true的,但是这样的方法会只判断了第0个1和第2个1这两个位置(没有判断最后两个1的情况),是因为没有更新哈希表中value对应的key的最新值导致的。class Solution {public原创 2022-03-06 20:25:50 · 1229 阅读 · 4 评论 -
【LeetCode1122】数组的相对排序(哈希or自定义sort)
文章目录一、题目二、方法一:哈希三、代码四、法二:自定义排序一、题目二、方法一:哈希没错,,简单题,就是说将arr1中有arr2的元素,则按照arr2的元素先排列(特别注意:这里的arr2的元素都是不同的,但是arr1中是可以元素重复的),然后arr1中不是arr2的元素则被丢到arr1的尾巴。可以用哈希,用mp1记录arr1数组每种数字的出现次数,mp2记录arr2数组的是否出现,接着就是上面说的逻辑,,就是脑子清醒点,mp1[arr2[i]]这种东西不要搞乱了。三、代码class Solu原创 2022-03-01 20:37:09 · 948 阅读 · 0 评论 -
【LeetCode705】设计哈希集合(哈希)
一、题目提示:0 <= key <= 10^6最多调用 104 次 add、remove 和 contains二、思路哈希表有个2个关键问题:哈希函数:将任意值通过哈希函数映射到固定值,可以设哈希表的大小为basebasebase,输入哈希函数值为keykeykey,设计一个简单的哈希函数:hash(key)=keymodbasehash(key) = key \quad mod \quad basehash(key)=keymodbase。其中basebasebase一般原创 2022-01-24 15:53:09 · 1086 阅读 · 0 评论 -
【LeetCode316】去除重复字母(单调栈+哈希)
一、题目二、思路先读懂题意,删除重复的字母,得到最小的字符串。如babc,删除重复字母有两种结果bac,abc。abc小于bac,所以答案是abc。遇到一个新字符 如果比栈顶小 并且在新字符后面还有和栈顶一样的 就把栈顶的字符抛弃了。(1)前者的条件即单调栈的步骤(for中带while);可以用哈希表inst统计当前字符是否在栈中。(2)为了满足后者的条件,即如果栈顶元素大于当前遍历到的字符s[i],并且栈顶元素在后面还存在,所以可以放心的pop掉。可以用哈希表cnt统计s中剩余字符的出现次数。原创 2022-01-19 23:55:55 · 697 阅读 · 0 评论 -
【LeetCode138】复制带随机指针的链表(dfs+哈希unordered_map)
一、题目示例1:输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]示例2:输入:head = [[1,1],[2,1]]输出:[[1,1],[2,1]]示例3:输入:head = [[3,null],[3,0],[3,null]]输出:[[3,null],[3,0],[3,null]]示例4:输入:head = []输出:[]解释:给定的链表为空原创 2022-01-10 22:05:58 · 904 阅读 · 1 评论 -
【LeetCode49】字母异位词分组(py3的defaultdict(list))
1.题目2.思路因为将一组字母异位词,分别对每个词排序后都是相同的词,我们就可以让这个排序好的词作为一个列表字典(以列表为value值的字典)的key值,而对于这个字典的value值即对应的所有的字母异位词。py3有collections.defaultdict(list)——方便生成一个value为列表的字典。详细可以参考这篇博文。3.python代码class Solution: def groupAnagrams(self, strs: List[str]) -> List原创 2021-05-20 00:35:46 · 708 阅读 · 2 评论 -
【HJ45】名字的漂亮度(哈希,sort)
1.题目2.思路说实话题目表达得有点歧义。。并非a到z的“漂亮度”为1~26,而是出现次数最多的字母的“漂亮度”为26,出现次数第二少的字母则为25,以此类推。另外注意本题大小写不区分。如果使用大顶堆则有点大材小用了,可以直接使用sort进行从小到大排序字母出现的次数。3.代码#include<iostream>#include<vector>#include<string>#include<algorithm>using namesp原创 2021-02-23 09:29:24 · 816 阅读 · 0 评论 -
【LeetCode1】两数之和(暴力/哈希)
1.题目2.思路法一:暴力枚举,不解释。class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { vector<int>ans; for(int i=0;i<nums.size();i++){ for(int j=i+1;j<nums.size();j++){原创 2021-02-05 16:35:25 · 725 阅读 · 0 评论 -
【1078】Hashing&素数
1.题目https://pintia.cn/problem-sets/994805342720868352/problems/994805389634158592给出散列表长TSize和欲插入的元素,将这些元素按读入的顺序插入散列表中,其中散列函数为H(key)=key%TSize,解决冲突采用只往正向增加的二次方探查法。如果TSize不是素数,则将TSize重新赋值为第一个比TSize大的素数再进行元素插入。2.思路散列函数H(key)=key%TSize,解决冲突使用二次方探查法。如果步长st原创 2021-01-10 21:49:16 · 656 阅读 · 0 评论 -
【1084】Broken Keyboard (20 分)
#include<iostream>#include<stdio.h>#include<stdlib.h>#include<math.h>#include<string>#include<algorithm> #include<map>#include<vector>#include...原创 2019-08-10 13:13:06 · 366 阅读 · 0 评论