两数之和:给定一个整数数组 nums
和一个整数目标值 target
,请你在该数组中找出 和为目标值 target
的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
法一:暴力算法
两个for循环验证完列表的所有组合看相加是否和target相等,注意返回的时候用return比较方便。
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
length=len(nums)
for i in range(length-1):
for j in range(1,length):
if i!=j:
if nums[i]+nums[j]==target:
return [i,j]
法二:哈希表——时间复杂度小于O(n2)以空间换时间
查找表法:哈希表;平衡二叉搜索树
哈希表存列表的元素和下标分别作为键值和键
第一个元素对应的target-x一定不在哈希表中,直接放入即可,下标后移查找target-x是否在表中,如果不在存入哈希表,如果在返回下标即可,这样只完成了一次查表的过程,但是所需要的空间增加了——以空间换时间。
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。方便在for循环中同时遍历下标和元素。
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
hashtable=dict()
for i, num in enumerate(nums):
if target-num not in hashtable:
hashtable[nums[i]]=i
else:
return [hashtable[target-num],i]