【问题标题】:Tricky nested loop O(n+m)?棘手的嵌套循环 O(n+m)?
【发布时间】:2020-04-29 14:20:19
【问题描述】:

我不太明白这个循环是如何工作的:

 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] 等.....],意味着随着它的增加,它们都会产生总和

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

如果我们在第二个循环中 break 或 make continue 会发生什么? 非常详细和更多的信息和解释将不胜感激

【问题讨论】:

    标签: java algorithm loops


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      它是一个内循环和外循环的嵌套循环。内循环的变量在外循环中初始化。这很不常见。如果您不确定它的行为方式,那么您可以在这里和那里打印一些东西到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)。

      【讨论】:

      • "如果你在内部循环中中断或继续,那么它会以 (i+1, 0) 继续。"不,下一次迭代将从(i+1, j) 开始,因为j 没有重置为零。
      猜你喜欢
      • 1970-01-01
      • 2019-10-02
      • 1970-01-01
      • 2021-07-24
      • 1970-01-01
      • 2016-10-18
      • 2020-10-01
      • 2019-03-08
      • 1970-01-01
      相关资源
      最近更新 更多