哈希
BM50 两数之和
描述 给出一个整型数组 numbers 和一个目标值 target,请在数组中找出两个加起来等于目标值的数的下标,返回的下标按升序排列。
(注:返回的数组下标从1开始算起,保证target一定可以由数组里面2个数字相加得到)数据范围:2≤len(numbers)≤10^5 ,−10≤numbers i ≤10 ^9 ,0≤target≤10^9 要求:空间复杂度 O(n),时间复杂度 O(nlogn)
示例1
输入:[3,2,4],6
返回值:[2,3]
说明:因为 2+4=6 ,而 2的下标为2 , 4的下标为3 ,又因为 下标2 < 下标3 ,所以返回[2,3]
示例2
输入:[20,70,110,150],90
返回值:[1,2]
说明:20+70=90
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param numbers int整型一维数组
# @param target int整型
# @return int整型一维数组
#
class Solution:
def twoSum(self, numbers: List[int], target: int) -> List[int]:
# write code here
index_list = []
# for i in range(len(numbers) - 1):
# for j in range(i + 1, len(numbers)):
# n_sum = numbers[i] + numbers[j]
# if n_sum == target:
# index_list = [i + 1, j + 1]
# return index_list
hash= dict()
for i in range(len(numbers)):
temp = target - numbers[i]
if temp not in hash:
hash[numbers[i]] = i
else:
index_list.append(hash