棘手的嵌套循环O(n + m)?

时间:2020-04-29 14:20:19

标签: java algorithm loops

我不太了解此循环的工作原理:

 for(int i = 0, j = 0; i < n; i++){
        for(; j < m; j++){

更多适当的例子

int arr[] = {1, 2, 3, 4, 5, 6, 7};
int arr1[] = {7, 6, 5, 4, 3, 2, 1};
for (int i = 0, j = 0; i < n; i++) {
  for (; j < m; j++) {
    if (arr[i] + arr1[j] < 0) break;
    if (arr[i] + arr1[j] > max) max = arr[i] + arr1[j];
  }
}

当循环开始时,它们会同时工作吗?就像[[1 + 7] [2 + 6] [3 + 5]等...]一样,意味着随着它们的增加,它们都会求和。

或确实像嵌套循环一样工作

,如果我们在第二个循环中中断或继续执行该怎么办? 非常详细,希望您能获得更多信息和解释

2 个答案:

答案 0 :(得分:0)

复杂度将为O(n + m),因为内部循环只会运行一次,并且j不会重置为0。

答案 1 :(得分:-1)

这是一个带有内部和外部循环的嵌套循环。内部循环的变量在外部循环中初始化。这很不常见。如果不确定其行为方式,则可以在此处System.out打印一些内容。 它递增(i = 0,j = 0),(i = 0,j = 1),...,(i = 0,j = m),(i = 1,j = 0),...如果您在内部循环中中断或继续,然后继续执行(i + 1,j),因为j未重置为0。

结果,时间复杂度为O(n * m)。