Python 2.7 从2列表中查找和等于给定值的对
我们有两个整数数组,a和b,以及一个整数目标值v。确定是否有一对数字,其中一个数字取自a,另一个取自b,可以相加得到v的和。如果存在这样一对,则返回true,否则返回false 例如: 对于Python 2.7 从2列表中查找和等于给定值的对,python-2.7,performance,for-loop,execution-time,Python 2.7,Performance,For Loop,Execution Time,我们有两个整数数组,a和b,以及一个整数目标值v。确定是否有一对数字,其中一个数字取自a,另一个取自b,可以相加得到v的和。如果存在这样一对,则返回true,否则返回false 例如: 对于a=[1,2,3],b=[10,20,30,40]和v=42,输出应为 sumOfTwo(a, b, v) = True 到目前为止,我的代码是: def sumOfTwo(a, b, v): for x in a: for y in b: if x+y =
a=[1,2,3]
,b=[10,20,30,40]
和v=42
,输出应为
sumOfTwo(a, b, v) = True
到目前为止,我的代码是:
def sumOfTwo(a, b, v):
for x in a:
for y in b:
if x+y == v:
return True
return False
我想减少执行时间,因为执行长列表需要很长时间。如果您首先将
b
转换为一个集合,应该会快得多:
def sumOfTwo(a, b, v):
b = set(b)
return any(v - x in b for x in a)
对于暴力解决方案,复杂性应该是O(M+N),而不是O(MN)。给定的两个列表是否排序??如果是这样的话,那就相当简单了。不,也尝试了排序,但无法减少执行时间。还尝试了
res=any(b中的v-x代表a中的x)
这些“长列表”大致有多长?10000项或更多。相关/可能的dup: