我想知道我是否能得到一些帮助。我想找到一个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个列表呢?任何想法都将不胜感激。
答案 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)