【LeetCode】哈希表

张开发
2026/4/11 14:31:18 15 分钟阅读

分享文章

【LeetCode】哈希表
前言今日联系掌握哈希表的高频使用方法理解hashmap的优势1.查找更快2.天然去重哈希表key唯一3.统计经常被用于统计1两数之和题目要求给你一个整数数组nums和目标值target要求找出数组中哪两个数之和target并返回对应下标核心思路想到用HashMap应为hashmap有对应关系。一个存放一个数的同时存放其对应下标代码实现classSolution{publicint[]twoSum(int[]nums,inttarget){HashMapInteger,IntegerresnewHashMap();for(inti0;inums.length;i){intneedtarget-nums[i];if(res.containsKey(need)){returnnewint[]{res.get(need),i};}res.put(nums[i],i);}returnnewint[0];}}总结记住hash表的优势以及一些语法.containsKey49字母异位词分组题目要求给定一个字符串数组要求将字母异位词组合在一起核心思路这题的底层还是hashmap只不过进阶了一下简单题目的key可以直接得到对于这道题来说得到key的过程是我们将每一个字符串元素通过拆成char然后进行array.sort排序得到的结果在toString就得到了key。代码实现MapString,ListStirngmapnewHashMap();for(Strings:strs){char[]charss.toCharArray();Arrays.sort(chars);StirngkeynewString(chars);//如果map中没有这个key先创建列表map.computeIfAbsent(key,k-newArrayList());//添加当前字符串到对应列表map.get(key).add(s);}//返回所有的值returnnewArrayList(map.values);总结记住核心思路语法知识map.computeIfAbsent(key,k-new ArrayList());等价于if (!map.containsKey(key)) {map.put(key, new ArrayList());}128最长连续序列题目要求题目给你一个没排过序的整数数组 nums要求让你找出最长连续序列的长度。时间复杂度是O(n)代表了我们无法用排序方法核心思路先用hashset来去重将元素全放到集合中然后遍历每一个元素判断该元素是否为序列的起点set.contains(num-1)是起点while循环找num1不是起点直接跳过并且长度1代码实现classSolution{publicintlongestConsecutive(int[]nums){HashSetIntegersetnewHashSet();for(intnum:nums){set.add(num);}intlongest0;for(intnum:set){//判断当前num是否为队头if(!set.contains(num-1)){intcurrentNumnum;intcurrentLen1;//当num不是队尾时继续更新while(set.contains(currentNum1)){currentLen;currentNum;}longestMath.max(longest,currentLen);}}returnlongest;}}总结核心哈希表 找起点 递增计数语法基础理解本题思路流程做出了就很流畅了。

更多文章