【发布时间】:2022-01-09 15:55:07
【问题描述】:
这可能是一个初学者的问题,但我有一个方法是使用嵌套循环在二维数组中查找值,假设主体看起来像这样:(假设有总是匹配二维数组中的 1)
// example array ==> int arr = new int[5][5]
int length = arr.length;
int index1 = -1;
int index2 = -1;
loop:
for (int i = 0; i < length; i++) {
for (int j = 0; j < length; j++) {
if (arr[i][j] == 1) {
index1 = i;
index2 = j;
break loop;
}
}
}
我以这种方式用一个额外的变量 (counter) 替换了第二个循环:
// example array ==> int arr = new int[5][5]
int length = arr.length;
int index1 = -1;
int index2 = -1;
int counter = 0;
for (int i = 0; i < length; i++) {
if (arr[counter][i] == 1) {
index1 = counter;
index2 = i;
break;
}
if (i == length - 1) {
counter++;
i = 0;
}
}
这是否仍被视为具有相同时间复杂度的嵌套循环? 如果有一个很好的链接可以理解如何分析我的代码复杂度,请附上!
这是一个示例代码,我知道可以做一些增强,但我只是询问时间复杂度(忽略边缘情况和错误处理)强>
【问题讨论】:
-
第二个示例中的
counter将永远保留0。 -
如果您需要遍历两个数组以在特定的“行”/“列”中找到一个值,那么它的实现方式并不重要——您无法避免任何一次迭代。您可以控制它何时停止迭代,但这不会改变它的 O.
-
我的错,请再次检查body,因为我忘记重新分配i并正确增加计数器。
-
这不是另一个迭代吗?最终结果是一样的(而且更难考虑)。
-
现在看来,如果数组没有1,程序永远不会结束。无论如何,它的复杂度仍然是 O(NxM)。
标签: java loops nested time-complexity big-o