首页 > 其他分享 >梦开始的地方:力扣热题100哈希表

梦开始的地方:力扣热题100哈希表

时间:2025-01-10 23:00:46浏览次数:3  
标签:map temp int 力扣 哈希 new 100

文章目录


前言

在刷力扣100题的征程中,我从哈希相关题目入手,一路探索,收获颇丰。如今,想将自己在这一过程中的思路与感悟进行一番总结,既为记录成长,也希望能给同样在算法之路上前行的朋友们提供一些参考。


一、哈希表是什么

优化后的表格内容如下:

概念描述
哈希表作为一种高效存储键值对(key - value)的数据结构,哈希表凭借独特设计,能在极短时间内完成数据查找与插入操作,堪称数据处理的得力助手。
哈希函数宛如神奇的“数据定位器”,它对输入键精心计算,巧妙映射为哈希表中的索引,借此实现数据的快速定位,精准存储与读取。
哈希冲突尽管哈希函数强大,但不同键有时会被映射到哈希表中的同一索引位置,即发生哈希冲突,这一现象可能对哈希表性能产生一定影响 。

哈希表在实际应用中,常被用于快速判定一个元素是否存在于集合之中,其高效性大幅提升了数据处理的效率与便捷性。

二、力扣解题常见的三种哈希结构(java版本)

1.数组

  • 力扣题目链接有效的字母异位词
  • 分析 :为何选用数组?在处理这道题时,我们需要对每个字符串进行遍历,并将相关信息记录下来,以便后续的分析与查找。由于题目涉及的字母仅有26个,属于有限且固定的范围,使用数组能够高效地对字母出现的频次进行统计与管理 。
  • 解题
    public boolean isAnagram(String s, String t) {
        if(s.length()!=t.length()){
            return false;
        }
        int[] temp=new int[26];
        for(int i=0;i<s.length();i++){
            temp[s.charAt(i)-'a']++;
        }
        for(int j=0;j<t.length();j++){
            temp[t.charAt(j) - 'a']--;
            if (temp[t.charAt(j) - 'a'] < 0) {
                return false;
            }
        }
        return true;
    }

2.set (集合)

  • 力扣题目链接最长连续序列
  • 分析 :选择集合的原因在于,本题所涉及的数据量可能较大,集合的特性使其能够高效地存储和处理大量数据。同时,在判断连续序列时,利用集合可以方便地从最小值开始往前判断,简化了判断逻辑。
  • 解题
    public static int longestConsecutive(int[] nums) {
        // 存储数据 去重
        HashSet<Integer> set = new HashSet<>();
        for (int num : nums) {
            set.add(num);
        }
        // 存储结果值
        int result = 0;
        for (Integer i : set) {
            // 检查是否是起点
            if (!set.contains(i - 1)) {
                int temp = i + 1;
                while (set.contains(temp)) {
                    temp++;
                }
                result = Math.max(result, temp - i);
            }
        }
        return result;
    }

3.map(映射)

  • 力扣题目链接两数之和
  • 分析 :本题选择map,主要是因为我们不仅需要记录数组中的值,还需要记录其对应的下标索引,以便在找到满足条件的两数时,能够准确地返回它们的下标。map的键值对结构恰好满足这一需求,通过将差值作为键,索引作为值存储,实现快速查找与匹配 。
  • 解题
    public static int[] twoSum(int[] nums, int target) {
        // 定义一个hashMap存储数据 key:差值 value:索引
        HashMap<Integer, Integer> map = new HashMap<>();
        // 遍历数据
        for (int i = 0; i < nums.length; i++) {
            int complement = target - nums[i];
            if (map.containsKey(complement)) {
                return new int[]{map.get(complement), i};
            }
            map.put(nums[i], i);
        }
        return new int[]{};
    }
  • 力扣题目链接字母异位词分组
  • 分析 :面对这道题,我们可以借助map强大的记录与分组能力。通过将排序后的字符串作为key,把具有相同字母组成(即字母异位词)的原始字符串作为value存储在map中,从而实现对字母异位词的高效分组。
  • 解题
    public List<List<String>> groupAnagrams(String[] strs) {
        // 定义一个hashMap存储词
        Map<String, List<String>> map = new HashMap<>();
        for (String str : strs) {
            char[] chars = str.toCharArray();
            // 排序
            Arrays.sort(chars);
            String key = new String(chars);
            List<String> list = map.getOrDefault(key, new ArrayList<String>());
            list.add(str);
            map.put(key, list);
        }
        return new ArrayList<List<String>>(map.values());
    }

总结

哈希表的卓越之处在于,在平均情况下,它能够以近乎常数时间( O ( 1 ) O(1) O(1))的速度执行插入、删除和查找操作,这一特性使其在众多算法场景中大放异彩。在后续的探索中,我会持续在这篇博客中更新更多关于哈希的力扣题目及解题思路,与大家一同在算法的海洋中遨游,不断提升自我。

标签:map,temp,int,力扣,哈希,new,100
From: https://blog.csdn.net/m0_46318653/article/details/145066003

相关文章

  • 关于此题[ABC367F] Rearrange Query随机化哈希的一些总结
    传送门这道题要求我们对于非常多的询问回答[l,r]、[L,R]这样两个区间内A、B数组中各个数的出现次数是否相同。看到这道题似乎想到了刚开始学编程的时候就想过的一个问题(bushi,那就是我能不能直接用,例如说这段区间和是否相同,或者说这段区间乘积之类的是否相同来判断这个区间各个数......
  • 力扣21、合并两个有序链表
    目录1、题目2、思路3、代码若有错误,欢迎指正! 1、题目将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例1:输入:l1=[1,2,4],l2=[1,3,4]输出:[1,1,2,3,4,4]示例2:输入:l1=[],l2=[]输出:[]示例......
  • 力扣283题——移除0
    要点就是不说废话,看题: 这题就是快慢指针法的进阶一点点,需要把第一次遍历完的数组再继续填空,把后面的空填充为0,这里给出我的做法:classMain{publicvoidmove(int[]nums){intn=nums.length;intslow=0;for(intfast=0;fast<n;fast++){......
  • 在 Safari 浏览器中,快速将页面恢复到 100% 缩放(也就是默认尺寸)Command (⌘) + 0 (零)
    在Safari浏览器中,没有一个专门的快捷键可以将页面恢复到默认的缩放比例。但是,你可以使用以下两种方法快速将页面恢复到100%缩放(也就是默认尺寸):方法一:使用快捷键(最常用)Command(⌘)+0(零)这个快捷键会立即将当前页面的缩放比例重置为100%。这是最常用的方式,......
  • 炸弹 (boom.c)(100分双端递推+分割线优化)
    炸弹(boom.c)时间限制:800ms内存限制:256000KiB进度:57/12406=0.5%题目描述出题助教:Sakiyary验题助教:Corax、XiEn、ErinwithBMQ、runz、MacGuffin、Bob维多利亚的腐烂荒野上出现了 N 个魔物,你和小维需要抓紧时间调配炸弹对付它们。荒野可以视为一张方格图,(x_i......
  • as-v1000视频监控平台导入导出功能,在平台迁移时快速导入设备信息
    目录一、背景说明二、导出操作三、导入操作四、视频播放五、在平台迁移中的应用    1、快速部署    2、减少错误    3、保持连续性六、总结一、背景说明        在视频监控领域,随着技术的不断进步和应用场景的不断拓展,系统升级与......
  • [数据结构学习笔记10] 哈希表(Hashtable)
    哈希表也叫Hashmap或者Dictionary,它存储和检索都非常快,所以常用于缓存数据供后续快速访问。哈希函数,是这样的一个函数,你提供一个input,它会返回一个唯一的值(hashcode)。只要你的input是相同的,这个哈希函数会返回同样的output。从哈希函数到哈希表哈希表底层是一个数组结构,这意味......
  • 《安富莱嵌入式周报》第348期:开源低功耗测试仪,开源创意万用表,续航100-300小时,开源PCB
    周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 视频版:https://www.bilibili.com/video/BV1Tzr9Y3EQ7/目录:1、开源低功耗测试仪2、开源创意万用表,续航100-300小时3、低级编程和优化实现4、资讯(1)兆易创新推出EtherCAT......
  • 【等待优化】sql server CXPACKET 等待 导致 CPU飙高、CPU100%
    From: https://www.cnblogs.com/gered/p/12539368.html目录【1】CXPACKET的基本解决策略【1.1】CXPACKET 解释【1.2】在OLTP上解决CXPACKET的办法——调整并行度【1.3】Data-warehousing/Reportingserver上的CXPACKET【1.4】MixedSystem(OLTP&OLAP)【2】CPU......
  • YASKAWA机械手维修DX100示教器通电无反应
    安川机器人DX100示教器通电无反应可能由多种原因导致,以下是一些常见的原因及对应的解决方法:可能原因电源问题:电源线破损或电源插座接触不良。 硬件故障:示教器内部电路板或元件(如内存条、处理器或显示屏等)损坏。 软件问题:软件发生错误或版本不匹配。 其他故障:如DX100示教器急......