
哈希表算法
文章平均质量分 89
Haooog
陪伴
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
哈希表总结篇
本文系统介绍了哈希表的理论基础及其应用场景。首先阐述了哈希函数和哈希碰撞(拉链法和线性探测法)的处理方式,详细分析了数组、集合(set)和映射(map)三种哈希结构的底层实现及适用条件。通过多个经典题目(如字母异位词、两数之和、快乐数等)对比了不同结构的优劣:数组适合有限字符集场景;set处理大范围离散值;map用于需要记录键值对的场景。特别强调map虽通用但非最优选择,应根据具体需求选择数据结构,如处理重复问题时双指针法往往优于哈希法。最后总结了哈希表的完整知识体系,帮助开发者高效选择合适的数据结构。原创 2025-08-26 11:38:09 · 799 阅读 · 0 评论 -
第18题:四数之和(哈希算法)
本文介绍了力扣第18题"四数之和"的解法。题目要求在数组中找出所有不重复的四元组使其和等于目标值。解法采用排序+双指针策略:首先对数组排序,然后通过两层循环固定前两个数,再使用双指针寻找后两个数。关键点包括剪枝优化(注意处理负数情况)、去重处理(跳过重复元素)以及防止整数溢出。时间复杂度为O(n³),相比暴力解法的O(n⁴)更高效。文章还对比了类似的三数之和问题,并提供了完整的Java实现代码。原创 2025-08-26 11:30:22 · 722 阅读 · 0 评论 -
第15题. 三数之和(哈希算法)
本文介绍了力扣"三数之和"问题的解决方案。题目要求在数组中找出所有不重复的三元组,使其和为0。最优解法是双指针法:首先对数组排序,然后固定一个元素,使用双指针在剩余部分寻找满足条件的组合。关键点在于正确处理重复元素,包括固定元素a的去重(与前一个比较而非后一个),以及找到有效组合后对左右指针的去重。该算法时间复杂度为O(n²),相比哈希法更高效且避免了复杂的去重操作。文章还通过具体示例解释了为什么要在找到有效组合后才进行去重处理。原创 2025-08-25 21:09:38 · 555 阅读 · 0 评论 -
383. 赎金信(链表算法)
题目要求判断赎金信字符串能否由杂志字符串中的字符构成。解决思路:1. 暴力解法:遍历杂志字符,逐个匹配并删除赎金信中的字符,时间复杂度O(n^2)。2. 哈希解法(推荐):利用数组统计杂志字符出现次数,再验证赎金信字符是否足够。关键点:- 杂志字符不可重复使用- 只含小写字母- 哈希数组比map更高效时间复杂度O(n),空间复杂度O(1)(固定26长度数组)。原创 2025-08-25 12:16:16 · 493 阅读 · 0 评论 -
第454题.四数相加II
摘要: 题目要求计算四个整数数组中满足A[i]+B[j]+C[k]+D[l]=0的元组数量。核心思路是通过哈希表分治处理:先统计前两个数组元素和及其频次,再遍历后两个数组时,查找互补和(0-(c+d))在哈希表中的出现次数并累加。该方法将O(n^4)暴力解优化为O(n^2)时间复杂度,避免重复计算。例如,输入A=[1,2], B=[-2,-1], C=[-1,2], D=[0,2]时,输出2。代码使用HashMap存储中间和,最终返回符合条件的元组总数。原创 2025-08-15 23:59:22 · 376 阅读 · 0 评论 -
1. 两数之和
【摘要】本文介绍了力扣"两数之和"问题的解法。题目要求在整数数组中找到和为给定目标值的两个数,返回其下标。暴力解法使用两层循环,时间复杂度为O(n²)。更优解法采用哈希表(HashMap),通过存储已访问元素及其下标,在遍历时检查目标补数是否存在,将时间复杂度降至O(n)。文中详细分析了哈希表的选择原因(相比数组和Set更合适)、key-value的含义(key存元素值,value存下标),并提供了两种哈希表实现代码及暴力解法代码,强调哈希法在快速查找元素时的优势。原创 2025-08-15 19:42:33 · 843 阅读 · 0 评论 -
第202题. 快乐数
时间复杂度:O(log n),由数字位数决定。空间复杂度:O(1),存储空间恒定。原创 2025-08-14 15:46:31 · 530 阅读 · 0 评论 -
349. 两个数组的交集
题目要求计算两个数组的交集,输出唯一元素且不考虑顺序。有两种解法:1.暴力法使用两个固定大小的数组记录数字出现次数,时间复杂度O(m+n),空间复杂度O(1);2.哈希法使用HashSet存储元素,利用集合去重特性,时间复杂度O(m+n),空间复杂度O(m+k)。哈希法更优,尤其当数值范围大时避免空间浪费。关键点在于理解HashSet高效查找和去重的特性,以及根据题目特点选择合适的数据结构。原创 2025-08-14 10:48:49 · 615 阅读 · 0 评论 -
242.有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词(字母异位词是通过重新排列不同单词或短语的字母而形成的单词或短语,并使用所有原字母一次。需要定义一个多大的数组呢,定一个数组叫做record,大小为26 就可以了,初始化为0,因为字符a到字符z的ASCII也是26个连续的数值。那看一下如何检查字符串t中是否出现了这些字符,同样在遍历字符串t的时候,对t中出现的字符映射哈希表索引上的数值再做-1的操作。为了方便举例,判断一下字符串s= "aee", t = "eae"。原创 2025-08-13 15:18:25 · 530 阅读 · 0 评论 -
哈希表理论基础#哈希表
摘要:哈希表是一种通过关键码直接访问数据的数据结构,本质是数组。它通过哈希函数将数据映射到索引位置,实现O(1)时间复杂度的快速查询。文中介绍了哈希碰撞的两种解决方法(拉链法和线性探测法)及适用场景,并对比了C++中三种哈希结构(数组、set、map)的底层实现和性能特点。作者建议解决元素存在性判断问题时优先考虑哈希法,但需注意其空间换时间的特性。文章还澄清了不同语言中哈希相关容器的命名差异,强调哈希法是面试中判断元素存在的首选解决方案。原创 2025-08-13 15:09:16 · 728 阅读 · 0 评论