数据结构与算法之 leetcode 哈希表四数相加算法 无序数组处理

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


哈希表在LeetCode四数相加问题中的应用

在LeetCode等编程竞赛平台中,四数相加问题是一个常见的算法题目。题目要求在无序数组中找到四个数,它们的和等于一个给定的目标值。这个问题可以通过多种算法解决,其中使用哈希表是一种高效的方法。本文将围绕哈希表在四数相加问题中的应用,详细探讨其算法实现和优化。

问题分析

四数相加问题的目标是找到数组中四个数的组合,使得它们的和等于一个特定的目标值。由于数组是无序的,我们需要考虑所有可能的组合。

哈希表的基本原理

哈希表是一种基于键值对的数据结构,它通过哈希函数将键映射到表中的一个位置,从而实现快速查找。在四数相加问题中,我们可以使用哈希表来存储已经遍历过的数和它们对应的索引,以便快速查找是否存在与当前数相加等于目标值的数。

算法实现

以下是一个使用哈希表解决四数相加问题的Python代码实现:

python

def fourSum(nums, target):


nums.sort() 首先对数组进行排序


result = []


n = len(nums)


for i in range(n - 3):


避免重复的数


if i > 0 and nums[i] == nums[i - 1]:


continue


for j in range(i + 1, n - 2):


避免重复的数


if j > i + 1 and nums[j] == nums[j - 1]:


continue


left, right = j + 1, n - 1


while left < right:


current_sum = nums[i] + nums[j] + nums[left] + nums[right]


if current_sum == target:


result.append([nums[i], nums[j], nums[left], nums[right]])


left += 1


right -= 1


避免重复的数


while left < right and nums[left] == nums[left - 1]:


left += 1


while left < right and nums[right] == nums[right + 1]:


right -= 1


elif current_sum < target:


left += 1


else:


right -= 1


return result


代码解析

1. 排序:首先对数组进行排序,这样我们可以使用双指针技术来减少不必要的比较。

2. 双层循环:外层循环遍历数组的前三个数,内层循环遍历剩余的数。

3. 哈希表:在遍历过程中,我们使用哈希表来存储已经遍历过的数和它们对应的索引。

4. 双指针:在内层循环中,我们使用双指针来查找剩余的两个数,使得它们的和与当前遍历的三个数的和相加等于目标值。

5. 去重:为了避免重复的组合,我们在添加结果到列表之前,检查是否有重复的数。

优化

1. 排序:排序是解决四数相加问题的关键步骤,它可以帮助我们使用双指针技术。

2. 去重:在遍历过程中,我们需要避免重复的数,这可以通过比较相邻的数来实现。

3. 哈希表:使用哈希表可以快速检查是否存在与当前数相加等于目标值的数。

总结

哈希表在四数相加问题中的应用是一种高效的方法。通过排序、去重和哈希表,我们可以快速找到所有满足条件的四个数的组合。在实际应用中,我们可以根据具体问题调整算法,以达到最佳的性能。