
哈希表
文章平均质量分 50
Betternw
这个作者很懒,什么都没留下…
展开
-
字典树的实现
题目描述字典树又称为前缀树或者Trie树,是处理字符串常用的数据结构。假设组成所有单词的字符仅是‘a’~‘z’,请实现字典树的结构,并包含以下四个主要的功能。void insert(String word):添加word,可重复添加;void delete(String word):删除word,如果word添加过多次,仅删除一次;boolean search(String word):查询word是否在字典树中出现过(完整的出现过,前缀式不算);int prefixNumber(String pre):原创 2021-08-08 15:03:51 · 337 阅读 · 0 评论 -
最长无重复子数组 最长连续子序列
题目给定一个数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同。子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组示例1输入:[2,3,4,5] 返回值:4说明:[2,3,4,5]是最长子数组示例2输入:[2,2,3,4,3] 返回值:3说明:[2,3,4]是最长子数组分析使用哈希表。我们使用两个指针,一个i一个j,最开始的时候i和j指向第一个元素,然后i往后移,把扫描过的元素都放到原创 2021-08-01 14:40:37 · 1081 阅读 · 0 评论 -
【哈希表 【字符串,list】形式 】 49 字母异位词分组
题目给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]输出:[[“ate”,“eat”,“tea”],[“nat”,“tan”],[“bat”]]分析构建哈希表,key为string,值保存按照字典排序的字符串,value为list值保存所有符合该字符串的值代码public List<List<String>> groupAnagr原创 2020-06-20 22:52:37 · 124 阅读 · 0 评论 -
【哈希表】 offer 50 第一个只出现一次的字符
题目在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。示例:s = “abaccdeff”返回 “b”s = “”返回 " "思路LinkedHashMap,存储数据采用的哈希表结构+链表结构。保证元素的存取顺序一致,因此可以符合取出第一个数量为1的值,并且相同的key可以实现覆盖更改代码public char firstUniqChar(String s) { //LinkedHashMap,存储数据采用的哈希表结构+链表结构。保证元素原创 2020-07-10 22:11:59 · 122 阅读 · 0 评论 -
【哈希表】offer 56-2 数组中数字出现的次数
题目在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。示例 1:输入:nums = [3,4,3,3]输出:4示例 2:输入:nums = [9,1,7,9,7,9,7]输出:1思路HashMap集合元素不重复,如果重复会进行覆盖,且是无序的LinkedMap集合元素不重复,是有序的map.keySet()方法可以遍历key代码 public int singleNumber(int[] nums) { Has原创 2020-07-12 17:25:18 · 234 阅读 · 0 评论 -
【哈希表】 448 找到所有数组中消失的数字
题目给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。输入:[4,3,2,7,8,2,3,1]输出:[5,6]思路使用哈希表将每个数字存储进去。然后for循环,从1到n,将哈希表数字取出进行比较。建立list集合,将没有的数字放入list中。代码public List<Integer> findDisappearedNumbers(int[原创 2020-06-10 13:49:26 · 147 阅读 · 0 评论 -
【滑动窗口 总结】 438 找到字符串中所有字母异位词
题目给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。输入:s: “cbaebabacd” p: “abc”输出:[0, 6】起始索引等于 0 的子串是 “cba”, 它是 “abc” 的字母异位词。起始索引等于 6 的子串是 “bac”, 它是 “abc” 的字母异位词。思路滑动窗口总结与寻找字符串排列一样 找到一个合法异位词就将起始索引加入res框架:while(){右移窗口进行窗口内数据更新判断左侧是否收缩wh原创 2020-06-27 12:18:34 · 101 阅读 · 0 评论 -
【哈希存储元素和个数,堆筛选次数,list存储再转换为数组】 347 前k个高频元素
题目给定一个非空的整数数组,返回其中出现频率前 k 高的元素。输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]输入: nums = [1], k = 1输出: [1]思路建立哈希表,将元素和元素对应次数放入哈希表中。建立大顶堆,根据次数大小建立,入堆,当堆内元素多于k个时,弹出多于元素,堆内剩下的就是频率前k高的元素。代码public int[] topKFrequent(int[] nums, int k) { HashMap<Intege原创 2020-06-29 16:25:30 · 188 阅读 · 0 评论 -
【二分 寻找左边界 收缩标准是小于mid的个数 HashSet】 287 寻找重复数
题目描述给定一个包含n+1个整数的数组nums,其数字都在1到n之间(包括1和n),可知至少存在一个重复的整数,假设只有一个重复的整数,找出这个重复的数。输入: [1,3,4,2,2] 输出:2分析注意长度和数字范围是有关系的。因此不能简单地用双指针。二分法——可以用于确定一个有范围的整数长度为n+1,每个数都在1-n之间,二分法确定left和right以及mid,如果小于mid的数字个数大于一半,则在小于部分区域,反之在大于部分区域。代码...原创 2020-05-27 11:02:36 · 129 阅读 · 0 评论 -
【哈希链表】 146 LRU、LFU缓存机制
题目设计LRU机制。支持获取数据get和写入数据put。获取数据 get(key) - 如果关键字 (key) 存在于缓存中,则获取关键字的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字/值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间。思路构建双向链表,每个节点存储键值对。哈希表中相应存储。读取时:如果有,就取出放在头部位置。(取出放在头部位置可原创 2020-06-13 16:47:55 · 206 阅读 · 0 评论 -
【递归 哈希表 根据根节点位置划分左右】 105从前序和中序遍历序列构造二叉树
题目根据一棵树的前序遍历与中序遍历构造二叉树。前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]3/ 9 20/ 15 7思路【根 左子树 右子树】【左子树 根 右子树】只要中序遍历定位到根节点,就知道左右子树的节点数目,然后递归继续求左右子树的根节点。中序遍历的定位可以用哈希表快速实现。代码 public class TreeNode { int val; TreeNode left;原创 2020-06-23 17:57:01 · 212 阅读 · 0 评论 -
[hashmap ] offer35 复杂链表的复制
题目请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null思路将复制节点连接在分别的原节点后,即1—1’—2–2’–3--3’–4’–4’。 通过1的ran指针找到随机节点,再通过next找到随机节点的拷贝节点,将1’连接拷贝节点。|| 哈希表,k为原指针,v为拷贝指针。1’next指向2’ get获得的是value 也就是拷贝节点,1’rand指向1random指针原创 2020-07-08 09:34:27 · 143 阅读 · 0 评论 -
【哈希表 +栈】 20 有效的括号
题目描述给定一个只包括 ()【】{}的字符串,判断是否有效。左括号必须用相同类型的右括号闭合,左括号必须以正确的顺序闭合。思路分析首先字符串转换成字符数组,可以进行for的循环。用栈进行判断,当左括号时,入栈,当右括号时,出栈,如果最后栈非空,返回错误。用哈希数组进行辅助,增加了代码的复用性。同时减少了判断次数:键值对,用key代表闭括号进行判断代码实现...原创 2020-02-19 20:38:47 · 164 阅读 · 0 评论 -
【双指针 哈希表】1.两数之和
题目描述给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。思路分析一 暴力两层循环,遍历数组,找相加等于target的两个数,定义一个新数组进行存放、代码实现思路分析二 哈希表将数组放入哈希表中,定义一个遍历,寻找是否存在一个值,等于target-当下值。当这个值存在且不是其本身时,将两个下标放入新的数组中...原创 2020-02-19 20:39:19 · 211 阅读 · 0 评论