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

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

时间:2022-11-01 23:24:48浏览次数:86  
标签:map 202 下标 int 随想录 数组 new public 两数

哈希表:用来快速判断一个元素是否出现在集合里


 

哈希表是根据关键码的值而直接进行访问的数据结构。(关键码也就是数组的下标,元素通过计算生成一个标识,此标识就是数组的下标,之后通过数组的下标对元素进行查找。)


 

 哈希碰撞:就是值两个及两个以上的元素通过计算,生成的关键码(下标)一样,这种现象就是哈希碰撞。

解决哈希碰撞的方法:

  1.拉链法:将发生冲突的元素存储在链表中,类似于hashMap。(选择合适的数组大小,才不会造成空间浪费)

  2.线性探测法:tableSize > dataSize;如遇到第二个下标相同的元素,则在第一个元素后面寻找空位存放。


常见的三种hash数据结构:

1.数组

2.set

3.map

 


 

242.有效的字母异位词:https://leetcode.cn/problems/valid-anagram/

使用一个长度为26的数组来记录每个字母出现的次数,数组的下标标识字母该放的位置,字符串s的字母出现一次+1;字符串t的字母出现一次-1;最后判断数组中有没有不为0的,不为0则说明两个字符串并不相等。

public class Solution {
    public static void main(String[] args) {
        Solution solution = new Solution();
        System.out.println(solution.isAnagram("anagram","nagaram"));
    }
    public boolean isAnagram(String s, String t) {
        int[] res = new int[26];
        char[] sa = s.toCharArray();
        char[] tc = t.toCharArray();

        for (char c : sa) {
            res[c - 'a'] += 1;
        }
        for (char c : tc) {
            res[c - 'a'] -= 1;
        }
        for (int r : res) {
            if (r != 0){
                return false;
            }
        }
        return true;
    }
}

349.两个数组的交集:https://leetcode.cn/problems/intersection-of-two-arrays/

求并集、交集,就可以使用到set集合,HashSet中不允许出现重复的值

public int[] intersection(int[] nums1, int[] nums2) {
        if (nums1 == null || nums2 == null || nums1.length == 0 || nums2.length == 0){
            return null;
        }
        HashSet<Integer> set1 = new HashSet<>();
        HashSet<Integer> set2 = new HashSet<>();

        for (int i : nums1) {
            set1.add(i);
        }
        for (int i : nums2) {
            if (set1.contains(i)){
                set2.add(i);   //确保元素唯一
            }
        }
        //set集合转化为数组
        int[] res = new int[set2.size()];
        int index = 0;
        for (Integer integer : set2) {
            res[index++] = integer;
        }
        return res;
    }

202.快乐数:https://leetcode.cn/problems/happy-number/

无限循环说明求和过程中可能会出现重复的数值,应该立即返回false;判断重复值就应该使用set集合。

public boolean isHappy(int n) {
        HashSet<Integer> set = new HashSet<>();
        while (n !=1 && !set.contains(n)){
            set.add(n);
            n = getSum(n);
        }
        return n == 1;
    }

    public static int getSum(int n){
        int sum = 0 ;
        while (n > 0) {
            int a = n % 10;
            sum += a*a;
            n /= 10;
        }
        return sum;
    }

1.两数之和:https://leetcode.cn/problems/two-sum/

  1.  使用哈希表:当需要查询一个元素是否重复出现过,首先考虑哈希表
  2. 使用map:需要返回下标,元素值和下标都可以储存
  3. map的key和value分别是什么:key存元素值,value存下标
public class Solution {
    public static void main(String[] args) {
        Solution solution = new Solution();
        int[] ints = solution.twoSum(new int[]{2, 7, 11, 15}, 9);
        for (int anInt : ints) {
            System.out.print(anInt+" ");
        }
    }
    public int[] twoSum(int[] nums, int target) {
        int[] ints = new int[2];
        HashMap<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
           //target-nums[i]的差来判断在map中是否存在,取出下标
            int temp = target - nums[i];
            if (map.containsKey(temp)){
                ints[0] = map.get(temp);
                ints[1] = i;
            }
            map.put(nums[i],i );
        }
        return ints;
    }
}

 

标签:map,202,下标,int,随想录,数组,new,public,两数
From: https://www.cnblogs.com/li-keke/p/16846328.html

相关文章

  • 工作感受月记(202211月)
    2022年11月01号今日做事有哪些?与lili通话聊问题,一聊就是一小时。分析手中老案例,解决一个是一个。低沉的心情在工作,在家自己一直开心不起来。今日工作中有什么事情来......
  • 2022_11_1
    ......
  • 代码随想录day31 | 455.分发饼干 376. 摆动序列 53. 最大子序和
    455.分发饼干题目|文章思路满足能让最小胃口的孩子吃饱首先对饼干和胃口值都进行排序对饼干进行遍历,如果能满足当前孩子的胃口,那么就将结果加1。实现点击查看代......
  • [2022 祥云杯] Reverse部分赛题复现
    女娲补天:指星期天打了一天的V3,再不学re......
  • CEOI 2021
    CEOI2021\(pts\):64+0+4\(T1:64pts\)首先我们肯定知道对于相同的数,一定是放在一起才是最优的,随意我们对于每段查询的区间要保证有序,然后我们发现,每个数出现的位置......
  • 2022 CSP-S GX 迷惑行为大赏(P1 文件读写篇)
    文件的的读写错误一直都被oier们深恶痛绝津津乐道,我们在看乐子bushi的同时也应该注意,不要一失足成千古恨,3年oi一场空。在广西的S组选手中,有21份代码中出现了//freo......
  • CSP2022 反思
    首先挖一下坟最后还是错了脑瘫错误。。。。。。。。。。。。。。。。。。。。。。。。。。。。。T1大概是60(用spfa然后深搜),然而lyx大佬发现原来跑n遍迪杰斯特拉就满了(我......
  • 【2022-11-01】前端Vue框架(六)
    一、Vuex的使用Vuex基本使用#在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意......
  • CSP 2022 游记
    高一老年人拉,还有最后一个月的OI生涯。初赛乱打,反正是过了(去杭州的路上在借py的手机打元,上一次打元还是中考回去时候,那次加特林技能一开狂暴5s秒杀Boss(。CSP前......
  • “烦人的催人精”-强有力的推动者(下)(2022年10月17日-10月21日)
        非链路延期要不要同步?延期细节要不要事事俱到?事外人轻松发言,局内人如何应对?......    笔者认为如果是非链路的话,风险/问题情况可控的话,不需要对外同步,避......