第1种算法,特别臃肿,浪费内存
'''
1.偏移量0+9=9,元素2+7=9满足条件
2.偏移量4+5=9,元素3+6=9也满足条件
但是字典的后面的键值会覆盖前面,因此使用f '{}'.format(i+nums.index(j)) in dict排除
'''
nums = [2,8,11,15,3,6,4,3,5,9,1]
dict = {}
list = []
def get_target(target):
for i in range(len(nums)-1):
for j in nums[i+1:]:
if nums[i]+j == target:
if '{}'.format(i+nums.index(j)) in dict: # i+nums.index(j),4+5=9
print([i,nums.index(j)]) # 存在问题:列表有两个相同元素时候,比如3,nums.index(j)获取是第1个3的偏移量,而不是后面的3。但是这个问题会被if '{}'.format(i+nums.index(j)) in dict排除,因为第二个重复出现的target会被去掉
print('中止')
continue
dict['{}'.format(i+nums.index(j))] = [i,nums.index(j)]
for i in dict:
list.append(int(i))
return dict[str(min(list))]
print(get_target(9))
# print(dict)
第2种算法,两数相减后,判断余数是否还在数组,有的话立即返回,这样思路简单明了。
def twoSum(nums, target):
for i in range(len(nums)): # len(nums)=10
num = target - nums[i]
if num in nums[i+1:]: # i=0时,num=9-2=7 → if 7 in 列表立即返回数据
return [i, nums.index(num,i+1)]
print(twoSum([0,8,11,15,3,6,4,3,5,7,1],9))
后续继续使用dict把所有可能的结果都存储起来,然后再继续筛选出满足要求3即可。