数据结构与算法之 leetcode 哈希表四数相加 双哈希表优化

数据结构与算法阿木 发布于 2025-07-12 8 次阅读


哈希表四数相加(双哈希表优化)——LeetCode算法挑战

在LeetCode等编程竞赛平台中,算法题是考察程序员逻辑思维和编程能力的重要环节。其中,四数相加问题是一个经典的哈希表应用场景。本文将围绕这一主题,探讨如何使用双哈希表优化四数相加问题的解决方案,并详细解析代码实现。

问题分析

四数相加问题要求在数组中找到四个数,它们的和等于目标值。这个问题可以通过暴力解法实现,但效率较低。为了提高效率,我们可以利用哈希表来优化算法。

哈希表优化思路

1. 单哈希表法:首先遍历数组,将每个数与其索引存储在哈希表中。然后,对于每个数,遍历哈希表,查找是否存在一个数与当前数相加等于目标值。这种方法的时间复杂度为O(n^2)。

2. 双哈希表法:首先遍历数组,将每个数与其索引存储在哈希表中。然后,对于每个数,遍历哈希表,查找是否存在一个数与当前数相加等于目标值。使用另一个哈希表存储每个数与目标值之差及其索引。这种方法的时间复杂度可以降低到O(n)。

双哈希表优化实现

以下是一个使用Python实现的双哈希表优化四数相加问题的代码示例:

python

def fourSum(nums, target):


创建两个哈希表


num_to_index = {}


complement_to_indices = {}

遍历数组,将每个数及其索引存储在num_to_index哈希表中


for i, num in enumerate(nums):


num_to_index[num] = i

遍历数组,查找符合条件的四个数


for i, num in enumerate(nums):


遍历num_to_index哈希表,查找是否存在一个数与当前数相加等于目标值


for complement in num_to_index:


if complement != num and (num + complement) == target:


将当前数与目标值之差及其索引存储在complement_to_indices哈希表中


complement_to_indices[complement] = complement_to_indices.get(complement, []) + [i]

遍历complement_to_indices哈希表,找到符合条件的四个数


result = []


for complement, indices in complement_to_indices.items():


for index in indices:


找到与当前数相加等于目标值的四个数


result.append([nums[i], nums[index], complement, target - num - complement])

return result


代码解析

1. num_to_index哈希表:存储每个数及其索引,方便后续查找。

2. complement_to_indices哈希表:存储每个数与目标值之差及其索引,用于快速找到符合条件的四个数。

3. 遍历数组:首先遍历数组,将每个数及其索引存储在num_to_index哈希表中。

4. 查找符合条件的四个数:遍历num_to_index哈希表,查找是否存在一个数与当前数相加等于目标值。如果存在,将当前数与目标值之差及其索引存储在complement_to_indices哈希表中。

5. 遍历complement_to_indices哈希表:遍历complement_to_indices哈希表,找到符合条件的四个数。

总结

本文介绍了使用双哈希表优化四数相加问题的解决方案。通过将每个数及其索引存储在哈希表中,我们可以快速找到符合条件的四个数,从而提高算法的效率。在实际应用中,我们可以根据具体问题选择合适的哈希表优化方法,以达到最佳性能。