【发布时间】:2011-11-30 07:32:43
【问题描述】:
我正在准备考试,遇到了这个似乎有点棘手的问题。
令 A[1...n] 和 B[1...n] 为 2 个整数数组,使得 A 或 B 的每个元素都在 0 到 m 的范围内,其中 m = O(n)。 (我假设这意味着 m
我们需要设计一个 O(n) 算法来找到两个元素 A[i] 和 B[j] 使得 A[i]+B[j] = 给定数 k 。如果它们不存在,我们会抛出错误消息。
现在对它们进行排序是不可能的,因为最好的排序算法是 O(n lg n) 。
也许使用哈希表 .. 或者只是创建一个长度为 m 的较小数组 X ,这样每个索引都会计算 A 中某个数字的出现次数 .. 然后我们通过 B .. 计算 diff = k - B[j] .. 并检查 X[diff] .. 如果它大于零,那么是的,它存在,然后我们可以再次通过 A 找到它的索引..
你们怎么看
【问题讨论】:
-
可能是您实际上被允许预处理数组(花费任何时间,如
O(n log n)),而O(n)要求实际上仅适用于后续查询的不同值k? -
您好。你已经回答了你的问题!只是为了分箱,或者正如你所说的“或者只是创建一个更小的数组 X ...”。这将非常高效,易于实现,并且很容易看出它的运行时间是 O(n)。
-
我意识到.. 我只是想看看互联网是否有更好的解决方案.. 但谢谢
标签: algorithm