寻找数组中两数之和等于目标值
题目描述
给定一个整数数组 nums
和一个整数目标值 target
,请你在该数组中找出和为目标值 target
的那两个整数,并返回它们的数组下标。
题目保证只有一种答案,但是要求给定数组 nums
中的值不能重复出现。
输入输出样例1
输入
[2,7,11,15]
9
输出
[0,1]
解释
输入数组中第一个元素 2
与第二个元素 7
之和等于 9
。因此输出 2
与 7
的下标 [0,1]
。
我的解法
# 遍历数组,判断数组中是否存在目标值与读取值的差值,若存在,则直接返回索引。
# 如:target = 9,当前读入数据为3,那么差值为9-3 = 6,寻找数组中是否有6这个值。
arr = eval(input()) # 输入数组
target = eval(input()) # 目标对象
def search_index(arr,target):
for i in range(len(arr)):
subtract = target-arr[i]
if subtract in arr:
return [i,arr.index(subtract)]
return []
search_index(arr,target)
参考答案
法1:
暴力解法:遍历数组,找到两个值的和为目标值。这种做法时间复杂度为O(n^2),空间复杂度为O(1)。
# 初始做法:遍历数组,找到两个值的和为目标值
def search_index(arr,target):
for i in range(len(arr)):
for j in range(i+1,len(arr)):
if arr[i]+arr[j]==target:
return [i,j]
return []
arr = eval(input()) # 输入数组
target = eval(input()) # 目标对象
result = search_index(arr,target)
print(result)
法2(推荐):
利用哈希表来求解。
创建一个哈希表,并遍历数组,寻找哈希表中是否存在目标值与当前读取值的差值,若存在,则返回索引;若不存在,则将值加入哈希表(字典),将读取值作为键,在数组中的索引作为值加入。
如:target= 9,当前读入数据为3,那么差值为9-3=6,当哈希表中不存在6时,将当前读取值3作为键,数组中3对应的索引作为值加入哈希表中
def search_index(arr,target):
hashtable = dict() # 哈希表
for index,num in enumerate(arr):
if target-num in hashtable:
return [hashtable[target-num],index]
hashtable[arr[index]] = index
return []
arr = eval(input()) # 输入数组
target = eval(input()) # 目标对象
result = search_index(arr,target)
print(result)
加油!努力!千万不要放弃!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】博客园携手 AI 驱动开发工具商 Chat2DB 推出联合终身会员
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步