从2列表中查找总和等于给定值的对

问题描述 投票:0回答:1

我们有两个整数数组,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 == v:
                return True
    return False

我想减少执行时间,因为执行长列表需要很长时间。

python-2.7 performance for-loop execution-time
1个回答
1
投票

如果你首先将b转换为集合应该会快得多:

def sumOfTwo(a, b, v):
    b = set(b)
    return any(v - x in b for x in a)

对于强力解决方案,复杂性应该是O(M + N)而不是O(MN)。

© www.soinside.com 2019 - 2024. All rights reserved.