嵌套for
循环的最差时间和最佳时间复杂度是什么?
int compare(int n, int A[][]) {
int i, j, k, m;
for (i=1; i<=n; i++) {
for (j=1; j<=n; j++) {
for (k=1; k<=n; k++) {
for (m=1; m<=n; m++) {
if (A[i][j] == A[k][m] && !(i==k && j==m))
return 1;
}
}
}
}
return 0;
}
我试图自己解决这个问题,但对于最内部的循环将如何增加复杂性感到非常困惑。
答案 0 :(得分:2)
最佳情况下时间复杂度是恒定的O(1)
。当网格A
的第一个元素和第二个元素相等时,将发生最佳情况。
1 1 x x x
A = x x x x x
x x x x x
x x x x x
最坏情况的复杂度是O(n^4)
。如果网格A
的所有元素都是唯一的,则会发生最坏的情况。
1 2 3 4
A = 5 6 7 8
9 10 11 12
13 14 15 16
答案 1 :(得分:2)
最佳情况:当A [1] [1] = A [1] [2]时为O(1)
最坏的情况:O(n 4 ),当没有重复的元素时->最终要遍历每个元素的整个数组。
请注意,您可以使用地图或集合(将其称为结构)更有效地实现它:
根据您使用的结构,这将使O(n 2 log n)或O(n 2 )的情况更糟