Algorithm O(nlogn)搜索两个数组中两个元素之和的算法
给定两个排序的整数数组A1,A2,它们具有相同的长度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),而一个
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!!!!