【发布时间】:2023-03-24 14:27:02
【问题描述】:
鉴于以下问题,我不胜感激任何更正,因为我没有解决方案 对于当前问题(取自我教授的一项考试!!!):
备注:这不是功课!
问题:
给定两个排序数组A(长度为n)和B(长度为m),其中每个
元素(在两个数组中)是一个实数,一个数字X(也是一个实数),
我们想知道a ∈ A和b ∈ B是否存在,如:
a + b = X,在O(n+m)运行时间。
解决方案:
首先,我们从两个数组的末尾开始检查,因为我们不需要大于X 的数字:
- i = n
k = m
而 A[i] > X , i = i -1
- 当 B[k] > X , k = k -1
定义 j = 0 。
现在从A 中的当前i 和B 中的j 开始运行:
-
while i > 0 , j < k: -
if A[i]+B[j] == X,然后返回两个单元格 - 否则
j = j+1 , i = i -1
最后我们要么拥有这两个元素,要么我们会合二为一
或两个数组,这意味着确实不存在像a + b = X 这样的两个元素。
任何意见将不胜感激
谢谢
【问题讨论】:
-
也许你可以用伪代码写下你的整个算法。英语和伪代码之间的混合让我感到困惑。
-
请注意,您可以省略预处理。您可以将递减 i 留给主循环,对于 j 使用合适的循环条件(j ≤ m 和 B[j] ≤ X)。在数组中允许负数的情况下,您不应该进行任何此类优化。
标签: arrays algorithm sorting big-o