交叉路口的时间复杂度(最坏情况)

Time complexity for an intersection (worst case)

无法找到最坏情况时间复杂度的时间复杂度。这种情况是针对相同大小 (n) 的两个排序数组的交集。

不确定如何计算带有两个条件的 while 循环或如何计算 if 和 else if 语句

我知道大 0 是 N+N,但不知道如何显示最坏的情况。

int printIntersection(int arr1[], int arr2[])  {
  int i = 0, j = 0;
  while (i < n && j < n) {
    if (arr1[i] < arr2[j])
      i++;
    else if (arr2[j] < arr1[i])
      j++;
    else /* if arr1[i] == arr2[j] */ {
      cout << arr2[j] << " ";
      i++;
      j++;
    }
  }
}

要证明在最坏的情况下循环将进行 2N 次迭代,您可以使用以下参数。
在每一步给定两个索引 ij

  • if arr1[i] < arr2[j] then i 递增 1
  • if arr2[i] > arr1[j] then j 递增 1
  • if arr2[i] = arr1[j] 那么 ij 都增加 1

每次迭代 至少 i 和 j 之间的一个递增 1,最大迭代次数以 2N 为界(i 和 j 都从 0 到 n- 1), 你得到最坏情况下的时间复杂度。