寻找数组中两数之和等于目标值

题目描述

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。

题目保证只有一种答案,但是要求给定数组 nums 中的值不能重复出现。

输入输出样例1

输入
[2,7,11,15]
9
输出
[0,1]
解释
输入数组中第一个元素 2 与第二个元素 7 之和等于 9。因此输出 27 的下标 [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)
posted @ 2022-03-21 17:56  Cara_Smith  阅读(295)  评论(0编辑  收藏  举报