今天刷一道题,计算一串数字中其中两个数字相加等于目标值的题目,且取其中最早的两个数字(最后一个数字的位置靠前)。
如[1,25,32,4,3,6,9,5] targer:9 输出 [3,6] 虽然[4,5]也满足
我的想法是,每次第i个数字 查找 target - nums[i] 是否在nums[i]之前出现。
开始用 if target - nums[i] in nums[:i],但是切片相当于复制额外增加复杂度O(N),
后来改为建立一个 newlist 每次比较完一个数字不成功增加newlist.append() , if target - num[i] in newlist
但还是很慢,最后把newlsit = [] 改为 set,set类似字典,用了hash算法实现 有address = f(key) 查找复杂度为O(1)
代码如下:
def sum_pairs(ints, s):
mymap = set()
for value in ints:
if s - value in mymap:
return [s-value, value]
mymap.add(value)
return None