【JAVA算法|hot100】哈希类型题目详解笔记

这里记录刷hot100的思考过程详解,方便后续记忆复习。

题号1

1. 两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。

你可以按任意顺序返回答案。

具体题解
java 复制代码
class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer,Integer> hashmap=new HashMap<>();
        int i=0;
        for(int num:nums){
            if(hashmap.containsKey(target-nums[i])){
                return new int[]{i,hashmap.get(target-nums[i])};
            }
            hashmap.put(nums[i],i);
            i++;
        }
        return new int[0];
    }
}
思路解析

通过containsKey查找之前是否存入过target-numi

必会知识

1.containsKey函数

2.数组初始化new int\[\]{x,y}

题号49

49. 字母异位词分组

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

具体题解
java 复制代码
class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String,List<String>> map=new HashMap<>();
        for(String str:strs){
            char[] array=str.toCharArray();
            Arrays.sort(array);
            String key=new String(array);
            List<String> list=map.getOrDefault(key,new ArrayList<String>());
            list.add(str);
            map.put(key,list);
        }
        return new ArrayList<List<String>>(map.values());
    }
}
思路解析

对每个字符串排序,异位词排序后一定相同。

必会知识

1.字符串转为字符数组,toCharArray()

2.字符数组排序,Arrays.sort()

3.字符串可通过字符数组初始化,new String(array)

4.获取原有异位词集合或新集合列表,getOrDefault(key,new ArrayList<String>());

5.只获取hashmap的value值集合,map.values()

题号128

128. 最长连续序列

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

请你设计并实现时间复杂度为 O(n)的算法解决此问题。

具体题解
java 复制代码
class Solution {
    public int longestConsecutive(int[] nums) {
        Set<Integer> hashset=new HashSet<>();
        for(int num:nums){
            hashset.add(num);
        }
        int max=0;
        for(int num:hashset){
            if(!hashset.contains(num-1)){
                int currentnum=num;
                int currentmax=1;
                while(hashset.contains(currentnum+1)){
                    currentmax+=1;
                    currentnum+=1;
                }
                max=Math.max(max,currentmax);
            }
        }
        return max;
    }
}
思路解析

先通过hashset去重,然后找到每个连续序列的最开始数字,去遍历计算最长序列。

必会知识

hashset的使用

相关推荐
青山是哪个青山5 小时前
LangChain 学习笔记(四):Message 与提示词模板
笔记·学习·langchain
嘻哈∠※7 小时前
0061基于 SpringBoot 的投稿与稿件处理系统设计与实现
java·spring boot·后端
白狐_7988 小时前
408数据结构第8章:排序②——性质对比秒杀、场景选择与外部排序
java·数据结构·算法
zander2588 小时前
LeetCode 84:柱状图中的最大矩形——单调栈如何确定左右边界
java·数据结构·算法
码匠许师傅8 小时前
【C++ 面试真题】聊聊 C++ 的拷贝构造与拷贝赋值
java·c++·面试
Shell运维手记8 小时前
Linux 常用基础命令学习笔记
linux·运维·笔记·学习·算法·github
FakeOccupational9 小时前
【电路笔记 STM32】Cortex-M7 内核上的数据缓存(D-Cache)结构+MPU+DMA&Cache+STM32CubeMX配置
笔记·stm32·缓存
动词ing9 小时前
【学习笔记】C语言(数组指针与指针数组+字符数组+函数+参数传递+字符串作为形参+递归函数+指针函数+回调函数+结构体嵌套+内存动态分配函数)
c语言·笔记·学习
极创信息10 小时前
系统安全隐患全方位排查方案:标准化渗透测试全流程
java·opencv·struts·数据挖掘·eclipse·语音识别·hibernate
汉字萌萌哒10 小时前
2019CCF-CSP入门级C++试题解析
java·开发语言·c++