两个排序数组,2个元素的总和等于一定数量

时间:2016-09-19 20:46:47

标签: python arrays algorithm big-o

我想知道我是否能得到一些帮助。我想找到一个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")

我认为这是打破线性时间的双重循环,但你会如何重复2个列表呢?任何想法都将不胜感激。

2 个答案:

答案 0 :(得分:6)

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

如果总和是你的目标,你就完成了。

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

如果它太低,请转到第二个中的下一个最低值。

如果您在未到达目标的情况下浏览两个列表,则返回false。

答案 1 :(得分:3)

这是一个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)