哈希表理论基础
文章讲解:代码随想录
242.有效的字母异位词 --数组做哈希表
题目链接/文章讲解/视频讲解: 代码随想录
349. 两个数组的交集 --set做哈希表
题目链接/文章讲解/视频讲解:代码随想录
(1)思路总结
(2)用set做
(3)用数组做
202. 快乐数
题目链接/文章讲解:代码随想录
题目中说了会无限循环,那么也就是说求和的过程中,sum会重复出现,这对解题很重要!
当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法了。所以这道题目使用哈希法,来判断这个sum是否重复出现,如果重复了就是return false,否则一直找到sum为1为止。判断sum是否重复出现就可以使用unordered_set。
还有一个难点就是求和的过程,如果对取数值各个位上的单数操作不熟悉的话,做这道题也会比较艰难。
1. 两数之和
题目链接/文章讲解/视频讲解:代码随想录
(1)思路总结
(2)代码
其他总结
-
int[] hash=new int[26]; //[]里是长度
hash[s.charAt(i)-'a']++; //写成hash[s[i]-'a']是不对的,因为s[i]是string,没有办法减‘a’,因此需要将string转化为字符 // charAt() 方法用于返回指定索引处的字符。索引范围为从 0 到 length() - 1。
for(int count:hash) //遍历hash数组中每一个元素,用count表示;对int数组也适用
-
Set<Integer>result=new HashSet<>(); //定义hashset,里面没有重复元素
向hashset中添加元素:result.add(count);
判断hashset中有没有哪个元素: if(set1.contains(count))
获取hashset的大小:result.size()。 //其他的都是length:int数组用num.length;string 用s.length()
-
hashset转数组形式
//写法1 return result.stream().mapToInt(x -> x).toArray();
//写法2 再定义一个数组,依次复制元素进去 【时间更快】
-
//求一个数字各个位平方之和
int num=0;
while(n>0){
int temp=n%10; //获取目前最后一位
num+=temp*temp;
n=n/10; //减少最后一位
}
-
Map<Integer,Integer> map=new HashMap<>(); //定义hashmap
if(map.containsKey(key)) //hashmap中是否包含某个key,map都是快速查找一个key是否在该map中
map.get(key); // hashmap根据key获得value的值
map.put(key,value); //向hashmap中添加一对(key,value)
Map.getOrDefault(Object key, V defaultValue);
//如果在Map中存在key,则返回key所对应的的value。
//如果在Map中不存在key,则返回默认值。