代码随想录算法训练营第六天 | 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和

哈希表理论基础 

文章讲解:代码随想录

242.有效的字母异位词   --数组做哈希表

题目链接/文章讲解/视频讲解: 代码随想录

(1)思路总结
(2)代码

349. 两个数组的交集   --set做哈希表

题目链接/文章讲解/视频讲解:代码随想录

(1)思路总结

(2)用set做

(3)用数组做

202. 快乐数

题目链接/文章讲解:代码随想录

        题目中说了会无限循环,那么也就是说求和的过程中,sum会重复出现,这对解题很重要!

        当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法了。所以这道题目使用哈希法,来判断这个sum是否重复出现,如果重复了就是return false,否则一直找到sum为1为止。判断sum是否重复出现就可以使用unordered_set。

        还有一个难点就是求和的过程,如果对取数值各个位上的单数操作不熟悉的话,做这道题也会比较艰难。

1. 两数之和

题目链接/文章讲解/视频讲解:代码随想录

(1)思路总结

(2)代码

其他总结

  1. 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数组也适用

  2. 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()

  3. hashset转数组形式

    //写法1  return result.stream().mapToInt(x -> x).toArray();

    //写法2  再定义一个数组,依次复制元素进去   【时间更快】

  4. //求一个数字各个位平方之和

            int num=0;

            while(n>0){

                int temp=n%10;   //获取目前最后一位

                num+=temp*temp;

                n=n/10;    //减少最后一位

            }

  5. 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,则返回默认值。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值