
哈希表
圆滚滚的柴柴
这个作者很懒,什么都没留下…
展开
-
牛客 剑指offer:两数之和
题目:两数之和思路:哈希。建立一个哈希表,键是数组中的数组,值是该数的索引。然后我们就可以遍历数组,查找解是否存在。如果是建哈希表与遍历分开,那么会存在一个问题:如果一个数刚好出现2次并且target是该数的2倍,例8,2,3,2,9:target = 4。此时第一个2的索引会被覆盖。所以,我们建哈希表与查询结果在同一个循环内进行:拿到一个数num,我们先判断target-num是否在表里,如果在,那么找到答案,返回;如果不在,我们就把num及其索引存到表里。这样避免了有重复的问题。代码:imp原创 2021-03-20 09:32:37 · 143 阅读 · 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 · 69 阅读 · 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 · 165 阅读 · 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 · 175 阅读 · 0 评论