【LeetCode】哈希表

前言

今日联系:掌握哈希表的高频使用方法,理解hashmap的优势

1.查找更快

2.天然去重:哈希表key唯一

3.统计:经常被用于统计

1:两数之和

题目要求:给你一个整数数组nums和目标值target

要求:找出数组中哪两个数之和=target,并返回对应下标

核心思路

想到用HashMap:应为hashmap有对应关系。一个存放一个数的同时存放其对应下标

代码实现

java 复制代码
class Solution {
    public int[] twoSum(int[] nums, int target) {
        HashMap<Integer,Integer> res=new HashMap<>();
        for(int i=0;i<nums.length;i++){
            int need=target-nums[i];
            if(res.containsKey(need)){
                return new int[]{res.get(need),i};
            }
            res.put(nums[i],i);
        }
        return new int[0];
    }
}

总结

记住hash表的优势

以及一些语法:.containsKey

49:字母异位词分组

题目要求:给定一个字符串数组

要求:将字母异位词组合在一起

核心思路

这题的底层还是hashmap,只不过进阶了一下

简单题目的key可以直接得到,对于这道题来说,得到key的过程是:我们将每一个字符串元素通过拆成char,然后进行array.sort排序得到的结果在toString就得到了key。

代码实现

java 复制代码
Map<String,List<Stirng>> map=new HashMap<>();

for(String s:strs){
char[] chars=s.toCharArray();
Arrays.sort(chars);
Stirng key=new String(chars);
//如果map中没有这个key,先创建列表
map.computeIfAbsent(key,k->new ArrayList<>());
//添加当前字符串到对应列表
map.get(key).add(s);
}
//返回所有的值
return new ArrayList<>(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循环找num+1

不是起点,直接跳过,并且长度+1

代码实现

java 复制代码
class Solution {
    public int longestConsecutive(int[] nums) {
        HashSet<Integer> set=new HashSet<>();
        for(int num:nums){
            set.add(num);
        }
        int longest=0;
        for(int num:set){
            //判断当前num是否为队头
            if(!set.contains(num-1)){
                int currentNum=num;
                int currentLen=1;
                //当num不是队尾时,继续更新
                while(set.contains(currentNum+1)){
                    currentLen++;
                    currentNum++;

                }
                longest=Math.max(longest,currentLen);
            }
        }
    return longest;
    }
}

总结

核心:哈希表 + 找起点 + 递增计数

语法基础,理解本题思路流程,做出了就很流畅了。

相关推荐
怪奇云呼军17 分钟前
G.711、Opus 和重采样会拖慢识别吗?闪电智能VoiceAgent 的音频入口怎么选
java·人工智能·python·算法·云计算·音视频
ZC跨境爬虫30 分钟前
LeetCode 27. 移除元素(双指针详解 + Java Python 多解法对比)
java·python·leetcode
乐观勇敢坚强的老彭2 小时前
C++ 竞赛常用算法模板速查表
开发语言·c++·算法
高洁012 小时前
工信部教考中心证书
人工智能·深度学习·算法·机器学习·知识图谱
我变成萤火虫2 小时前
河南萌新联赛2026第(三)场:郑州轻工业大学
数据结构·c++·算法·贪心算法·stl·深度优先·哈希算法
Dr.kangder2 小时前
嵌入式面试总结(十九)——内存泄露
单片机·算法·面试·职场和发展·架构·硬件架构
Herbert_hwt2 小时前
【C语言基础】常量、选择结构与运算符全解析
c语言·开发语言·算法
Suxing93 小时前
C语言基础分享:从“租房”到“拆迁”,C语言动态内存管理
java·数据结构·算法
LuminousCPP3 小时前
单链表专题(四)-刷题复盘篇-LeetCode 138 随机链表复制|原地拷贝法突破复杂指针操作
数据结构·笔记·算法·leetcode·链表
逆境不可逃4 小时前
【LeetCode 912】排序数组——随机化快速排序详解
数据结构·算法·排序算法