dict与list的in 操作的速度

时间:2023-03-10 06:24:25
dict与list的in 操作的速度

今天刷一道题,计算一串数字中其中两个数字相加等于目标值的题目,且取其中最早的两个数字(最后一个数字的位置靠前)。

如[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