题目
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
解析
1、暴力法——超时
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
for i in range(len(nums)):
j = i + 1
while True:
if nums[i]+nums[j] == target:
return i,j
else:
j += 1
if j >= len(nums):
break
2、用字典模拟哈希表
主要思路是查找 target-num是否也在哈希表中存在
Python 字典 (Dictionary) get() 函数返回指定键的值,如果值不在字典中返回默认值None。
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
hashmap = {}
# 将给定列表的 元素和索引 映射到哈希表中
for index,num in enumerate(nums):
hashmap[num] = index
# 查找 target-num 是否也在哈希表中,如果在则会返回它的索引j,否则会返回None
for i,num in enumerate(nums):
j = hashmap.get(target - num)
if j is not None and i!=j:
return [i,j]