【LeetCode刷题】两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。
你可以按任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:
输入:nums = [3,2,4], target = 6 输出:[1,2]
示例 3:
输入:nums = [3,3], target = 6 输出:[0,1]
提示:
2 <= nums.length <= 104-109 <= nums[i] <= 109-109 <= target <= 109- 只会存在一个有效答案
解题思路
- 创建哈希表:用于存储数组中已遍历的数字及其对应的下标。
- 遍历数组:对于当前数字
num,计算其与目标值target的差值complement = target - num。 - 检查差值是否存在:如果
complement在哈希表中,说明已找到满足条件的两个数,直接返回它们的下标;如果不在,将当前数字num及其下标存入哈希表。
Python代码:
from typing import Listclass Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:num_map = {} # 存储{数字: 下标}for i, num in enumerate(nums):complement = target - numif complement in num_map:return [num_map[complement], i]num_map[num] = ireturn []# 测试代码
if __name__ == "__main__":# 示例输入test_cases = [([2, 7, 11, 15], 9),([3, 2, 4], 6),([3, 3], 6)]# 执行测试solution = Solution()for nums, target in test_cases:result = solution.twoSum(nums, target)print(f"输入: nums={nums}, target={target} → 输出: {result}")

程序运行截图如下:

总结
本文介绍了如何在整数数组中找到两个数,使其和等于目标值target,并返回它们的下标。通过哈希表存储已遍历数字及其下标,遍历数组时检查当前数字与目标值的差值是否存在于哈希表中,若存在则返回对应下标。Python实现包括创建哈希表、遍历数组和检查差值的步骤,并通过示例测试验证了算法正确性。该方法时间复杂度为O(n),空间复杂度为O(n),适用于大规模数据。
