Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm O(nlogn)搜索两个数组中两个元素之和的算法_Algorithm - Fatal编程技术网

Algorithm O(nlogn)搜索两个数组中两个元素之和的算法

Algorithm O(nlogn)搜索两个数组中两个元素之和的算法,algorithm,Algorithm,给定两个排序的整数数组A1,A2,它们具有相同的长度n和一个整数x,我需要编写一个在O(nlog(n))中运行的算法,该算法确定是否存在两个元素A1,A2(每个数组中有一个元素)使A1+A2=x 起初,我考虑使用两个索引迭代器,从0开始,一次增加一个,这取决于A1的下一个元素比A2的下一个元素大/小。但在两个阵列上测试后,我发现它可能会错过一些可能的解决方案…这是一个奇怪的问题,因为在时间O(N lgn)中存在一个不雅观的解决方案(对于A1的每个元素,通过二分法搜索查找A2中的x-A1),而一个

给定两个排序的整数数组A1,A2,它们具有相同的长度
n
和一个整数
x
,我需要编写一个在O(nlog(n))中运行的算法,该算法确定是否存在两个元素
A1,A2
(每个数组中有一个元素)使
A1+A2=x


起初,我考虑使用两个索引迭代器,从0开始,一次增加一个,这取决于A1的下一个元素比A2的下一个元素大/小。但在两个阵列上测试后,我发现它可能会错过一些可能的解决方案…

这是一个奇怪的问题,因为在时间
O(N lgn)
中存在一个不雅观的解决方案(对于A1的每个元素,通过二分法搜索查找A2中的
x-A1
),而一个很好的解决方案只需要
O(N)
操作


从A1的左侧和A2的右侧开始,在A2中向左移动,只要
A1+A2≥x
。然后在A1中向右移动一个位置,并在需要时在A2中更新…

这是一个奇怪的问题,因为在时间
O(N Lg N)
中存在一个不雅观的解决方案(对于A1的每个元素,通过二分法搜索查找A2中的
x-A1
),而一个很好的解决方案只需要
O(N)
操作


从A1的左侧和A2的右侧开始,在A2中向左移动,只要
A1+A2≥x
。然后在A1中向右移动一个位置,如果需要,在A2中更新…

好吧,因为它们都已经排序,算法应该是O(n)(排序应该是O(n*log(n)):

i1=0
i2=A2.2尺寸-1
而i1=0
如果A1[i1]+A2[i2]x
--i2
其他的
成功

好吧,因为它们都已经排序了,所以算法应该是O(n)(排序应该是O(n*log(n)):

i1=0
i2=A2.2尺寸-1
而i1=0
如果A1[i1]+A2[i2]x
--i2
其他的
成功

一个数组从index=0=i开始,另一个数组反向从other=j开始。 第一步,你知道列表A中有最小的,列表B中有最大的,所以你从x中减去i,然后向下移动j索引,直到值= 基本上,有两个索引向中间移动
如果索引i的值>索引j的值,则不存在与x匹配的和。

从索引=0=i开始一个数组,另一个从索引=0=j开始另一个数组。 第一步,你知道列表A中有最小的,列表B中有最大的,所以你从x中减去i,然后向下移动j索引,直到值= 基本上,有两个索引向中间移动
如果索引i的值>索引j的值,那么就不存在与x匹配的总和。

在我看来,迭代
A1
的每个元素
a
,并在
A2
中对
x-a进行二进制搜索应该可以做到这一点。在我看来,迭代
A1
中的每个元素
a
,并在
A2
中对
x-a
进行二进制搜索应该可以解决这个问题。你是如何得出这个结论的?我在大学里一个人做这些有困难你是怎么想到的?我在大学里一个人带着这些东西有困难
i1 = 0
i2 = A2.size - 1
while i1 < A1.size and i2 >= 0
    if A1[i1] + A2[i2] < x
        ++i1
    else if A1[i1] + A2[i2] > x
        --i2
    else
        success!!!!