这是我的问题:
给出一个数字列表和数字“ k”,返回列表中是否有两个数字加起来等于“ k”
例如,给定[1,2,5,6]
,其中k
为7,则由于2 + 5为7,因此返回True
。
这是我的代码;我需要一些有关如何向量化的帮助。
L = [3,4,1]
k = 5
for i in L:
for j in L:
if i+j == k:
print("True")
break
if i+j == k:
break
答案 0 :(得分:-1)
矢量化似乎在这里没有帮助。
但是,我提出了一种新算法,可以将复杂度从O(N ^ 2)降低到O(N):
L = [3,4,1]
Lset = set(L)
k = 5
for x in L:
if k - x in Lset:
print("True")
break
我认为该算法是不言自明的! :)它基本上遍历L
,并针对每个数字检查列表中是否存在其“免费”(满足x + complimentary == k
的数字)(已转换为一组,以降低会员检查费用) )。
如果您不想计算L = [1]
,k = 2
之类的案件,则可以执行以下操作:
for x in L:
if k - x in Lset:
if k - x == x and L.count(x) < 2:
continue
print("True")
break
答案 1 :(得分:-1)
使用itertools.combinations(L,2)给出所有2个长度序列