在编程面试和算法学习中,寻找数组中和为特定目标值的两个整数是一个经典问题。本文将详细介绍这个问题的背景、解法以及 Python 实现。
问题描述
给定一个整数数组 nums
和一个整数目标值 target
,我们需要在该数组中找出和为目标值 target
的那两个整数,并返回它们的数组下标。
示例
输入: nums = [2, 7, 11, 15], target = 9
输出: [0, 1]
解释: nums[0] + nums[1] = 2 + 7 = 9, 所以返回 [0, 1].
解题思路
我们可以使用几种不同的方法来解决这个问题,最常见的有以下两种:
-
暴力法:使用双重循环遍历所有可能的组合,检查每对数字的和是否等于目标值。这种方法的时间复杂度为 O(n^2),在数据量较大时效率较低。
-
哈希表法:使用一个哈希表(字典)来存储数组中的数字及其索引。在遍历数组时,我们可以通过查找目标值与当前数字的差值是否存在于哈希表中来判断是否找到了一对数字。此方法的时间复杂度为 O(n),效率更高
Python 实现
这里我们将实现哈希表法,代码如下:
def two_sum(nums, target):
# 创建一个空字典来存储数字及其索引
num_map = {}
# 遍历数组
for i, num in enumerate(nums):
# 计算与当前数字配对的目标值
complement = target - num
# 检查差值是否在字典中
if complement in num_map:
return [num_map[complement], i] # 返回两个数的索引
# 如果没有找到,将当前数字及其索引存入字典
num_map[num] = i
return None # 如果没有找到,返回 None
# 测试
print(two_sum([2, 7, 11, 15], 9)) # 输出: [0, 1]
代码解析
-
创建字典:我们首先创建一个空字典
num_map
,用于存储已遍历数字的值和索引。 -
遍历数组:使用
enumerate
函数遍历nums
数组,同时获取每个数字的索引。 -
计算补数:对于每个数字
num
,计算它的补数complement
,即target - num
。 -
查找补数:检查补数是否存在于
num_map
中。如果存在,说明找到了两个数字,返回它们的索引。 -
更新字典:如果补数不存在,将当前数字及其索引存入字典
num_map
。 -
返回结果:如果遍历完整个数组都没有找到,返回
None
。
总结
在这篇文章中,我们探讨了如何在数组中寻找和为目标值的两个整数。通过使用哈希表,我们能够有效地解决这个问题,时间复杂度为 O(n)。这种方法不仅高效,而且易于实现。
希望这篇博客能帮助你理解这个经典问题及其解决方案!如果你有任何问题或想法,欢迎在评论区留言。