有人能解释一下为什么这个算法是 O(n^2)
吗?根据 this,它是 O(n^2)。
我认为它是 O(n^3) 的原因是外部循环(对于 x)运行了 n
次,内部循环(对于 y)运行了 n-1
次,在最坏的情况下,例如 A = [8, 100, 101, 102, 103, 104, 105, 106, 107]
,while 循环(对于 z)将运行 n-2
次,因此总体上是 O(n^3)
。
为了完整起见,A
是一个正元素排序数组,如果 A[x] + A[y] > A[z]
,则三元组(x,y,z)是一个三角形。找出可以从 A 中构建多少个三角形。
int TrianglesCount(int[] A)
{
int result = 0;
for (int x = 0; x < A.Length; x++)
{
int z = x + 2;
for (int y = x + 1; y < A.Length; y++)
{
while (z < A.Length && A[x] + A[y] > A[z])
z++;
result += z - y - 1;
}
}
return result;
}