两个排序数组,2个元素的总和等于某个数

Two Sorted Arrays, sum of 2 elements equal a certain number

我想知道是否可以得到一些帮助。我想找到一种算法,即 THETA(n) 或线性时间,用于确定 2 个排序数组中的 2 个数字是否加起来等于某个数字。

例如,假设我们有 2 个排序数组:X 和 Y

我想确定是否有 X 的一个元素和 Y 的一个元素相加正好等于某个数字,比方说 50。

到目前为止,我已经能够在 Python 中提出这些算法,但我很确定它们是 THETA(n^2) 的顺序而不是 THETA(n)。

def arrayTestOne(X,Y):
    S =[1 for x in X for y in Y if x+y == 50]

def arrayTestTwo(X,Y):
    for x in X:
        for y in Y:
            if x + y == 50:
                print("1")

我认为是双 for 循环打破了线性时间,但是您还能如何遍历 2 个列表?如有任何想法,我们将不胜感激。

这里有一个甚至不需要排序的 2n:

def check_array(x, y, needed_sum):
    y = set(y)
    return next(((i, needed_sum-i) for i in x if (needed_sum-i) in y), None)

你可以做的是从一个列表中最高的开始,另一个列表中的最低,然后检查总和。

如果总和是您的目标,那么您就完成了。

如果太高,转到第一个列表中的下一个最高值。

如果太低,则转到第二个下一个最低值。

如果您通过两个列表都没有达到目标,那么您 return 错误。