题目描述
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
示例 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]
示例 3:
输入:nums = [3,3], target = 6
输出:[0,1]
解题思路
实现时间复杂度在O(n),引入哈希表。将每个数字对应key,索引对应value,由于可能出现相同的数字,因此value应采用列表结构。
例如:
代码实现
def twoSum(self, nums: List[int], target: int) -> List[int]:
hash_list = {}
i = 0
for num in nums:
if num not in hash_list.keys():
hash_list[num] = [i]
else:
hash_list[num].append(i)
i+=1
print(f"hash_list:{hash_list}")
keys = hash_list.keys()
for k in keys:
res = []
res.append(hash_list[k][0])
l = len(hash_list[k])
rt = target-k
if rt in keys:
if rt == k and l > 1:
res.append(hash_list[rt][1])
return res
elif rt!=k:
res.append(hash_list[rt][0])
return res
else:
continue