哈希表
leetCode涉及哈希表的题目
消灭猕猴桃
保持热爱,奔赴山海
展开
-
[leetCode]448. 找到所有数组中消失的数字
题目https://leetcode-cn.com/problems/find-all-numbers-disappeared-in-an-array/解法将原数组当作哈希表,由于数组中的数字大小都在[1, n]内,数组的长度为n,所以遍历数组元素x,将nums[x - 1]加上n,如果数组中没有元素缺失的话数组每个位置元素的值都应该大于n,如果有缺失元素的话,缺失元素对应位置的元素值是不大于n的,这样就能找到数组中的缺失元素。class Solution { public List&原创 2021-02-13 09:19:41 · 98 阅读 · 0 评论 -
[leetCode]888. 公平的糖果棒交换
题目哈希表推导出映射关系使用哈希表求解:假设A的总和为sumA, B的总和为sumB,交换元素x, y后A、B总和相等,即sumA−x+y=sumB−y+x,化简得:x=y+(sumA−sumB)/2sumA - x + y = sumB - y + x,化简得: x = y + (sumA - sumB) / 2sumA−x+y=sumB−y+x,化简得:x=y+(sumA−sumB)/2,将A中元素加入哈希表,遍历B中元素,如果符合上述映射关系,则找到了交换得一对元素。class Solut原创 2021-02-01 09:58:01 · 131 阅读 · 0 评论 -
[leetCode]350. 两个数组的交集 II
题目https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/哈希表使用一个哈希表对一个数组中的元素进行计数,为了降低时间复杂度选择较短的数组进行计数,计数完成后遍历另一个数组,如果哈希表中存在当前元素则加入答案,并使该元素的数量减1class Solution { public int[] intersect(int[] nums1, int[] nums2) { int len1 = nums1.l原创 2021-01-24 20:30:12 · 83 阅读 · 0 评论 -
[leetCode]205. 同构字符串
题目https://leetcode-cn.com/problems/isomorphic-strings/哈希表此题与第 [leetCode]290.单词规律思路一样,都利用“双射”,在这题中是指s中的每个字符与t中的每个字符唯一对应,t中的每个字符与s中的每个字符唯一对应,因此可以使用哈希表,在遍历字符串字符的过程中记录两者对应关系,如果出现冲突则返回false。这里的冲突是指哈希表中t映射到s中的字符不等于当前位置s的字符,或者 哈希表中s映射到t中的字符不等于当前位置t的字符。clas原创 2020-12-27 09:08:01 · 102 阅读 · 6 评论 -
[leetCode]387. 字符串中的第一个唯一字符
题目https://leetcode-cn.com/problems/first-unique-character-in-a-string/哈希使用数组统计每个字符出现的次数,从左向右遍历字符串寻找第一个只出现一次的字符,并返回其下标。class Solution { public int firstUniqChar(String s) { int[] map = new int[26]; for (char c : s.toCharArray()) {原创 2020-12-23 10:08:45 · 147 阅读 · 0 评论 -
[leetCode]389. 找不同 简单
题目https://leetcode-cn.com/problems/find-the-difference/给定两个字符串 s 和 t,它们只包含小写字母。字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。请找出在 t 中被添加的字母。计数遍历s中的字符进行计数,再遍历t中的字符将对应的字符数量–,如果t中一个字符的数量为0那么该字符为新增的字符。class Solution { public char findTheDifference(String s, Str原创 2020-12-18 09:53:13 · 208 阅读 · 0 评论 -
[leetCode]290.单词规律 简单
题目链接:https://leetcode-cn.com/problems/word-pattern给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。示例1:输入: pattern = "abba", str = "dog cat cat dog"输出: true哈希表pattern中的每一个字符与str中的唯一一个单词对应原创 2020-12-16 09:02:52 · 98 阅读 · 0 评论 -
[leetCode]49. 字母异位词分组
题目链接:https://leetcode-cn.com/problems/group-anagrams给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: ["eat", "tea", "tan", "ate", "nat", "bat"]输出:[ ["ate","eat","tea"], ["nat","tan"], ["bat"]]说明:所有输入均为小写字母。不考虑答案输出的顺序。哈希互为字母异位词的字符串排序之后原创 2020-12-14 10:02:57 · 103 阅读 · 0 评论 -
[leetCode]217. 存在重复元素
题目https://leetcode-cn.com/problems/contains-duplicate/给定一个整数数组,判断是否存在重复元素。如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。哈希class Solution { public boolean containsDuplicate(int[] nums) { Set<Integer> set = new HashSet<>原创 2020-12-13 07:49:20 · 310 阅读 · 0 评论 -
[LeetCode]1.两数之和
暴力法时间复杂度O(n2)O(n^2)O(n2)空间复杂度O(1)O(1)O(1)class Solution { public int[] twoSum(int[] nums, int target) { for (int i = 0; i < nums.length; i++) { for (int j = i + 1; j <...原创 2019-11-18 22:07:19 · 232 阅读 · 0 评论 -
242. 有效的字母异位词
博客园:给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1:输入: s = “anagram”, t = “nagaram”输出: true示例 2:输入: s = “rat”, t = “car”输出: false哈希表「数组其实就是一个简单哈希表」,而且这道题目中字符串只有小写字符,那么就可以定义一个数组,来记录字符串s里字符出现的次数。写法1:class Solution { public boolean isAnagram(St.原创 2020-10-24 14:28:04 · 121 阅读 · 0 评论 -
[leetCode]202. 快乐数
博客园:编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。示例:输入:19输出:true解释:12 + 92 = 8282 + 22 = 6862 + 82 = 10012 + 02 + 02 = 1哈希这题的关键是要理解题.原创 2020-10-24 20:33:07 · 146 阅读 · 0 评论 -
[leetCode]349. 两个数组的交集
博客园:给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]哈希求两个数组的交集就是求两个数组的共有元素,可以使用两个set集合来存放每个数组中不重复的元素,然后迭代另一个set集合中的元素,如果迭代元素属于另一个set集合则该元素属于交集中的元素。class Solution { publ.原创 2020-10-24 19:57:11 · 164 阅读 · 0 评论 -
[leetCode]575. 分糖果
博客园:给定一个偶数长度的数组,其中不同的数字代表着不同种类的糖果,每一个数字代表一个糖果。你需要把这些糖果平均分给一个弟弟和一个妹妹。返回妹妹可以获得的最大糖果的种类数。示例 1:输入: candies = [1,1,2,2,3,3]输出: 3解析: 一共有三种种类的糖果,每一种都有两个。最优分配方案:妹妹获得[1,2,3],弟弟也获得[1,2,3]。这样使妹妹获得糖果的种类数最多。示例 2 :输入: candies = [1,1,2,3]输出: 2解析: 妹妹获得糖果[2,3],.原创 2020-10-24 19:07:04 · 132 阅读 · 0 评论 -
[leetCode]383.赎金信
博客园给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成。如果可以构成,返回 true ;否则返回 false。(题目说明:为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思。杂志字符串中的每个字符只能在赎金信字符串中使用一次。)注意:你可以假设两个字符串均只含有小写字母。canConstruct(“a”, “b”) -> falsecanConstr.原创 2020-10-24 14:48:23 · 274 阅读 · 0 评论 -
[leetCode]1365. 有多少小于当前数字的数字
博客园:题目链接:https://leetcode-cn.com/problems/how-many-numbers-are-smaller-than-the-current-number给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 nums[j] < nums[i] 。以数组形式返回答案。示例:输入:nums = [8,1,2,.原创 2020-10-26 20:43:25 · 116 阅读 · 0 评论 -
[leetCode]219. 存在重复元素 II
博客园:题目链接:https://leetcode-cn.com/problems/contains-duplicate-ii给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的 绝对值 至多为 k。示例 1:输入: nums = [1,2,3,1], k = 3输出: true示例 2:输入: nums = [1,0,1,1], k = 1输出: true示例 3:输入: n.原创 2020-10-27 19:52:10 · 148 阅读 · 2 评论