【发布时间】:2011-12-04 06:00:11
【问题描述】:
假设给定一个未排序的整数数组
A = {3,4,5,1,4,2}
输入:6
输出:{5,1}, {4,2}
如何在 O(n) 或 O(log n) 中做到这一点。任何建议将不胜感激。
更新: 我们能写出比这更高效的东西吗?
for(int i=0;i<array.length-1;i++)
{
if(array[i]+array[i+1]==6)
System.out.println("{"+array[i]+","+array[i+1]+"}");
}
【问题讨论】:
-
[给定两个数组 a 和 b 的可能重复项。找到所有元素对 (a1,b1),使得 a1 属于数组 A,b1 属于数组 B,其和 a1+b1 = k] (stackoverflow.com/questions/3815116/…)
-
在您的示例中,您假设两个整数是相邻的。这是故意的吗?对于
k=6,如果A={2,3,4},即使{2,4}=6,也不会返回任何内容。此外,您的算法是 O(n),因此无法编写更高效的算法 - 但可以编写更正确的算法。