1. 哈希表专题二:算法训练营深度解析
作为算法学习中的核心数据结构,哈希表在解决各类实际问题时展现出极高的效率。今天我们将聚焦哈希表在算法题解中的进阶应用,通过几个典型例题的深入剖析,掌握如何巧妙运用哈希表特性优化解题思路。这些内容特别适合已经掌握哈希表基础操作,希望提升实际问题解决能力的开发者。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心问题与解题思路
2.1 两数之和的哈希表解法
给定一个整数数组nums和一个目标值target,找出数组中两个数之和等于target的下标组合。这是LeetCode上的经典问题,也是哈希表应用的入门案例。
传统暴力解法需要O(n²)的时间复杂度,而使用哈希表可以将时间复杂度优化到O(n)。具体实现思路是:遍历数组时,用哈希表记录已经访问过的元素及其下标,对于当前元素nums[i],检查target-nums[i]是否存在于哈希表中。
python复制def twoSum(nums, target):
hash_map = {}
for i, num in enumerate(nums):
complement = target - num
if complement in hash_map:
return [hash_map[complement], i]
hash_map[num] = i
return []
注意:这里使用字典存储元素值到索引的映射,查找操作的时间复杂度为O(1),这是提升效率的关键。
2.2 三数之和问题的双指针+哈希表解法
三数之和问题要求找出数组中所有不重复的三元组,使得三个数之和为0。这个问题可以看作是两数之和的扩展版本。
虽然可以使用三重循环暴力解决,但时间复杂度高达O(n³)。更优的解法是结合排序、双指针和哈希表:
- 首先对数组进行排序(O(nlogn))
- 固定一个数nums[i],将问题转化为在i+1到n-1范围内寻找两数之和等于-nums[i]
- 使用双指针法在有序数组中高效寻找这两个数
python复制def threeSum(nums):
nums.sort()
res = []
n = len(nums)
for i in range(n-2):
if i > 0 and nums[i] == nums[i-1]:
continue
left, right = i+1, n-1
while left < right:
s = nums[i] + nums[left] + nums[right]
if s < 0:
left += 1
