![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
哈希表
圆滚滚的柴柴
这个作者很懒,什么都没留下…
展开
-
牛客 剑指offer:两数之和
题目:两数之和 思路:哈希。 建立一个哈希表,键是数组中的数组,值是该数的索引。然后我们就可以遍历数组,查找解是否存在。 如果是建哈希表与遍历分开,那么会存在一个问题:如果一个数刚好出现2次并且target是该数的2倍,例8,2,3,2,9:target = 4。此时第一个2的索引会被覆盖。 所以,我们建哈希表与查询结果在同一个循环内进行:拿到一个数num,我们先判断target-num是否在表里,如果在,那么找到答案,返回;如果不在,我们就把num及其索引存到表里。这样避免了有重复的问题。 代码: imp原创 2021-03-20 09:32:37 · 116 阅读 · 0 评论 -
牛客 剑指offer:数组中出现超过一半的数字
题目:数组中出现超过一半的数字 思路:哈希 代码: import java.util.*; public class Solution { public int MoreThanHalfNum_Solution(int [] array) { Map<Integer, Integer> map = new HashMap<>(); int n = array.length / 2; for (int num : array) {原创 2021-03-15 19:14:59 · 54 阅读 · 0 评论 -
leetcode Java二刷:41. 缺失的第一个正数
题目:41. 缺失的第一个正数 思路:哈希 可以新建一个哈希表,键是数组中出现的数组,值是bool。然后从1到n遍历数字,如果哈希表中没有该数字,那么该数字就是要求的数字;如果都有,就返回n+1。 不新建哈希表,以原来的数组为哈希,我们把数字存到其对应的索引,即1->0, 2->1……。我们遍历数组,如果数字的值num在[1, n](左闭右闭)区间里,并且数组num-1的索引处存的不是num,我们就交换二者的位置。最后再遍历数组,找出第一个数字与索引不匹配的就是要求的数字;如果找不到就返回n+原创 2021-02-23 15:05:06 · 109 阅读 · 0 评论 -
leetcode Java二刷:30. 串联所有单词的子串
题目:30. 串联所有单词的子串 思路:滑动窗口,哈希表 为词典中的单词建立一个哈希表。 词典中单词的长度为len,单词个数为n,滑动窗口长度为len * n 分别以字符串前len个单词为滑动窗口的起始点,每次向后滑动len个字符,为滑动窗口中的字符串建立哈希表,若两个哈希表相等,说明找到了一个目标子串。 代码: class Solution { public List<Integer> findSubstring(String s, String[] words) {原创 2021-02-18 19:03:30 · 126 阅读 · 0 评论