给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
#最简单的思路
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
for i in range(len(nums)):
a = nums[i]
b = target - a
for j in range(len(nums)):
if (nums[j] == b) & (i!=j):
return i,j
break
break
44 ms 13.4 MB
#优化
当我们使用遍历整个数组的方式寻找 target - x 时,
需要注意到每一个位于 x 之前的元素都已经和 x 匹配过,因此不需要再进行匹配。
而每一个元素不能被使用两次,所以我们只需要在 x 后面的元素中寻找 target - x
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
for i in range(len(nums)):
a = nums[i]
b = target - a
for j in range(i+1, len(nums)):
if nums[j] == b:
return i,j
break
break
28 ms 13.5 MB
#用哈希来做
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,
同时列出数据和数据下标,一般用在 for 循环当中。
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
hash = dict()
for i, element in enumerate(nums):
if target - element in hash:
return hash[target - element], i
break
hash[nums[i]] = i
36 ms 13.5 MB