题目描述
给定一个整数数组 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]
思路分析
新手小白,经验不多,对于这种简单题,能暴力解决就暴力解决,所以这里使用的是暴力法解题。
使用for循环,对nums数组进行遍历,第一层循环,找第一个数字,第二层循环,找第二个数字,找出符合要求的数字,获取其下标,保存到一个新数组中,最后直接返回该数组。
通过代码(python)
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
indexs=[]
for i in range(0,len(nums)):
for j in range(i+1,len(nums)):
if nums[i]+nums[j]==target:
indexs.append(i)
indexs.append(j)
return indexs
注意:避免重复循环导致重复获取下标,出现返回的结果为[0,1,1,0],第二层循环应从第一层循环中的i下一个i+1开始循环(题目中有提到数组中同一个元素在答案里不能重复出现),即第二层循环条件为(i+1,len(nums)
,而不是(0,len(nums)
。
若第二层循环条件为
(0,len(nums)
:
eg: nums=[2,7,11,15]
从第一个数字开始循环出现的情况:2+2,2+7,2+11,2+15
从第二个数字开始循环出现的情况:7+2,7+7,7+11,7+15
出现了数字重复:2+2,7+7
出现了组合重复:2+7,7+2
第一种重复不符合题目要求,第二种重复不符合输出要求。
相关结果
错误代码及分析
#错误代码1
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
indexs=[0,0]
for x in nums:
for y in nums:
if x+y==target:
indexs[1]=nums.index(x)
indexs[0]=nums.index(y)
return indexs
分析:
1.初始化返回数组indexs=[0,0]
,数组中的0会对输出结果有影响。
2.元素添加方法使用indexs[0]=nums.index(y)
,如果不初始化数组元素,会出现报错。
#错误代码2
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
indexs=[]
for x in nums:
for y in nums:
if x+y==target:
indexs.append(nums.index(x))
indexs.append(nums.index(y))
return indexs
分析:
循环语句for y in nums:
会导致重复的结果出现。
用到的知识点
1.一维数组初始化
固定长度 :lst1=[0,0,0],lst=[0]*3
不固定长度:lst=[]
2.元素添加
法一:append()方法添加元素:lst.append(obj),添加的元素在数组末尾。
法二:extend()方法添加元素:lst.extend(obj),添加的元素在数组末尾。
法三:两个数组相加,第二个数组的元素在第一个数组元素的末尾。