题目:
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
你可以按任意顺序返回答案。
方法一:
看到此题,脑海中第一个想法就是采取双层循环嵌套,外层循环i指向数组头,内层循环j紧挨着他,两数值相加在与target相比较,不同则移动j(i不变),直至j==len(List),在移动i。具体实现如下:
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
for i in range(len(nums)):
for j in range(i+1,len(nums)):
if nums[i]+nums[j]==target:
return i,j
PS:需要注意 j是=i+1,并不是1
方法二:
采用双指针方法,可以说是方法一的优化版本:
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
left=0
right=1
while(left<right):
if(nums[left]+nums[right]==target):
return left,right
if(right==len(nums)-1):
left+=1
right=left+1
else:
right+=1
方法三:
哈希表的使用
class Solution:
def twoSum(nums, target):
hashmap={}
for ind,num in enumerate(nums):
hashmap[num] = ind
for i,num in enumerate(nums):
j = hashmap.get(target - num)
if j is not None and i!=j:
return [i,j]