LeetCode 热题 100 | 1. 两数之和
题目描述
给定一个整数数组 nums 和一个整数目标值
target,请你在该数组中找出 和为目标值
target 的那 两个
整数,并返回它们的数组下标。
限制条件: * 每种输入只会对应一个答案。 * 不能使用两次相同的元素。
解题思路:哈希表法 (Hash Table)
为了将时间复杂度从暴力法的阶级降低,我们引入哈希表(C++ 中的
std::unordered_map)作为辅助。
核心思想
我们在遍历数组的同时,计算当前数字所需的“补数”。
temp = target − nums[i]
- 查记忆:在哈希表中查找是否存过这个 temp。
- 做决策:
- 如果找到了,说明找到了目标组合,直接返回。
- 如果没找到,将当前的数字存入哈希表,供后续数字查找。
代码实现 (C++)
1 | |
复杂度分析
时间复杂度
T(n) = O(n)
由于哈希表的查询和插入操作平均只需常数时间,我们只需遍历一次数组。
空间复杂度
S(n) = O(n)
最坏情况下需要将数组中的 n 个元素全部存入哈希表。
总结
在 C++ 中处理这类“寻找特定配对”的问题时,使用
std::unordered_map
是典型的空间换时间策略。
关键点提醒:
- 为什么是 O(n)? 因为哈希表将搜索的时间从 O(n) 降到了 O(1)。
- 避免自匹配:代码逻辑是“先查找,后存入”,这确保了 nums[i] 不会和它自己匹配。
LeetCode 热题 100 | 1. 两数之和
http://example.com/2025/12/30/LeetCode热题100-1两数之和/