【发布时间】:2017-10-18 16:55:17
【问题描述】:
我有一个未排序的数组,我想找到该数组中的所有对,以便它们的差值(绝对值)给出 x。
例如,如果 x=8 并且我们有数组 {13, 1,-8, 21, 0, 9,-54, 17, 31, 81,-46} 我会得到: 值为 13 和 21 的索引 0 和 3(例如,13-21= | 8 |) 值为 1 和 9 的索引 1 和 5 值为 -8 和 0 的索引 2 和 4 指数 6 和 10,值为 -54 和 -46
我做了一个解决方案,但我不确定它是 O(n) 还是 O(n^2)。我试图避免嵌套循环,而是保留两个指针 i 和 j,但我仍然认为它是 O(n^2)?它的行为有点像嵌套循环。
int i = 0;
int j = 1;
System.out.println("All pairs of elements of the array that subtract exactly to absolute value of " + x + " are:");
while (i < A.length && j < A.length)
{
if (abs(A[i] - A[j]) == x)
{
System.out.println("Indices " + i + " & " + j + " with values " + A[i] + " & " + A[j]);
}
if (j != A.length - 1)
{
j++;
} else if (i == A.length - 1)
{
return;
} else
{
i++;
j = i + 1;
}
}
【问题讨论】:
-
为您的代码和嵌套循环打印出
i和j的值。如果输出相同(如我所料),那么您就有答案了:您的代码是 O(n^2)。为了比 O(n^2) 做得更好,你需要一个不同的算法,例如首先对数组进行排序。 -
欢迎来到 Stack Overflow!假设代码正常工作,您可能希望以更完整的方式编写您的示例,并在Code Review 寻求批评。请务必先阅读A guide to Code Review for Stack Overflow users,因为那里有些事情的做法不同!