1. 哈希算法在LeetCode经典题目中的应用
最近重新开始刷LeetCode时,有三道题目让我对哈希算法的应用有了更深刻的理解。这三道题目看似不同,实则都展示了如何利用哈希表将算法时间复杂度从O(n²)优化到O(n)的精妙技巧。
哈希表作为一种基础数据结构,其核心优势在于O(1)时间复杂度的查找能力。在算法问题中,当我们遇到需要频繁查找元素的场景时,哈希表往往能带来显著的性能提升。下面我将详细解析这三道题目,揭示它们背后的共同模式。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Two Sum:补数查找的艺术
2.1 暴力解法及其局限
Two Sum问题最直观的解法是双重循环:
python复制for i in range(len(nums)):
for j in range(i+1, len(nums)):
if nums[i] + nums[j] == target:
return [i, j]
这种解法的时间复杂度为O(n²),当输入规模较大时效率明显不足。
2.2 哈希优化思路
关键在于认识到:对于当前数字num,我们真正需要查找的是它的补数(target - num)。通过使用哈希表记录已经遍历过的数字及其索引,我们可以将查找时间从O(n)降到O(1)。
优化后的代码:
python复制def twoSum(nums, target):
seen = {}
for i, num in enumerate(nums):
complement = target - num
if complement in seen:
return [seen[complement], i]
seen[num] = i
return []
2.3 关键技巧与注意事项
- 边遍历边存储:在检查补数的同时将当前数字存入哈希表,确保不会重复使用同一元素
- 索引存储:哈希表存储数字对应的索引,便于直接返回结果
- 一次遍历:整个过程只需遍历数组一次,时间复杂度降至O(n)
注意:这种解法假设每组输入只有唯一解,且不考虑重复元素的情况。如果题目要求所有可能的解,需要适
