力扣 hot 100题 -- 两数之和

📅 2026/7/2 15:27:29
力扣 hot 100题 -- 两数之和
问题描述给定一个整数数组nums和一个整数目标值target在数组中找出和为目标值target的那两个整数并返回它们的数组下标。可以假设每种输入只会对应一个答案且不能重复使用相同的元素。初始解法暴力枚举最直观的解法是使用双重循环遍历数组中的每一个可能的组合检查它们的和是否等于target。这种方法的时间复杂度为 O(n²)空间复杂度为 O(1)。class Solution: def twoSum(self, nums: List[int], target: int) - List[int]: n len(nums) for i in range(n): for j in range(i1, n): if nums[i] nums[j] target: return [i, j] return []缺点当数组规模较大时双重循环的效率较低容易导致超时。优化解法哈希表为了降低时间复杂度可以使用哈希表字典来存储数组元素及其下标。遍历数组时检查target - num是否存在于哈希表中。如果存在则直接返回对应的下标否则将当前元素存入哈希表。class Solution: def twoSum(self, nums: List[int], target: int) - List[int]: hashtable {} for i, num in enumerate(nums): if target - num in hashtable: return [hashtable[target - num], i] hashtable[num] i return []优点时间复杂度O(n)只需遍历一次数组。空间复杂度O(n)哈希表存储最多 n 个元素。算法思路初始化哈希表用于存储数组元素及其对应的下标。遍历数组对于每一个元素num计算target - num的值。检查哈希表如果target - num存在于哈希表中说明找到了满足条件的两个数返回它们的下标。更新哈希表如果未找到匹配项将当前元素及其下标存入哈希表。示例分析以nums [2, 7, 11, 15]和target 9为例第一次迭代num 2target - num 7哈希表为空存入{2: 0}。第二次迭代num 7target - num 22存在于哈希表中返回[0, 1]。边界条件数组中存在负数或零。数组中可能有重复元素但题目保证唯一解无需处理重复问题。确保不会重复使用同一个元素。总结哈希表方法通过空间换时间将时间复杂度从 O(n²) 降低到 O(n)非常适合处理大规模数据。在实际应用中优先选择哈希表解法。