问题:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
方法一:
nums = list(map(int,input().split()))
target = int(input())
for i in range(0,len(nums)):
for j in range(0,len(nums)):
if i !=j and nums[i]+nums[j] == target :
print(i,j)
这种方法有个bug,是输出两个答案,下标相反
方法二:
nums = list(map(int,input().split()))
target = int(input())
for i in range(0,len(nums)):
for j in range(i+1,len(nums)):
if i !=j and nums[i]+nums[j] == target :
print(i,j)
对以上代码进行修改,将一个数和它面的数依次相加,这样就不会有重复的答案,并且时间复杂度也降低了
方法三:
nums = list(map(int,input().split()))
target = int(input())
dict = {}
for i,j in enumerate(nums):
dict[j] = i;
for i,j in enumerate(nums):
k = dict.get(target - j)
if k is not None and i != k :
print(i,k)
采用hash表的方式,加快查找率,该代码有个bug,答案依然是重复显示
方法四:
nums = list(map(int,input().split()))
target = int(input())
dict = {}
for i,j in enumerate(nums):
dict[j] = i;
k = dict.get(target - j)
if k is not None and i != k :
print(i,k)
边生成字典边查找,这样前一个答案是不会匹配的,
方法五:
nums = list(map(int,input().split()))
target = int(input())
dict = {}
for i in range(len(nums)):
try :
j = nums.index(target - nums[i],i+1)
print(i,j)
except:
continue
这种方法思想和第一种是一样的,只是在python中有很多的方法可以调用,这样可以大大简化代码