LeetCode 题目:两个总和
描述:
编写一个函数,输入为一个整数数组nums
和一个目标整数target
,要求找到数组中两个数的和等于target
,并返回这两个数的索引。
函数定义:
def two_sum(nums: List[int], target: int) -> List[int]:
说明:
- 假设对于每个输入,都存在一个解决方案。
- 同一个元素不能被重复使用。
- 可以以任意顺序返回答案。
示例:
# 示例 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]
解释: 因为 nums[1] + nums[2] == 6,所以返回 [1, 2]。# 示例 3:
nums = [3, 3]
target = 6
输出: [0, 1]
解释: 因为 nums[0] + nums[1] == 6,所以返回 [0, 1]。
实现:
def two_sum(nums: List[int], target: int) -> List[int]:# 创建一个字典来存储元素的索引num_indices = {}# 遍历数组for i, num in enumerate(nums):# 计算目标差值target_diff = target - num# 检查差值是否已经在字典中if target_diff in num_indices:# 如果存在,返回当前索引和差值的索引return [num_indices[target_diff], i]# 将当前元素和索引加入字典num_indices[num] = i# 如果没有找到解决方案,返回 Nonereturn None
使用示例:
# 使用示例 1
nums1 = [2, 7, 11, 15]
target1 = 9
print(two_sum(nums1, target1)) # 输出:[0, 1]# 使用示例 2
nums2 = [3, 2, 4]
target2 = 6
print(two_sum(nums2, target2)) # 输出:[1, 2]# 使用示例 3
nums3 = [3, 3]
target3 = 6
print(two_sum(nums3, target3)) # 输出:[0, 1]
上述代码定义了一个名为two_sum
的函数,它接受一个整数列表nums
和一个整数target
作为输入,并通过字典来存储和查找能够相加得到目标值的两个数的索引。如果找到符合条件的两个数,函数返回它们的索引;如果不存在这样的两个数,则返回None
。通过几个示例,展示了如何使用这个函数来解决实际问题。