所以我下面有这个算法,可以在两个SORTED数组中找到共同的元素。鉴于两个数组分别具有m和n个长度,我需要找到此算法要进行的最大比较。
int printIntersection(int arr1[], int arr2[], int m, int n)
{
int i = 0, j = 0;
while (i < m && 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++;
}
}
}
我认为该算法的复杂度为O(m + n)。如果我错了纠正我。那么,比较的最大数量是m + n还是m * n?还是没有?
答案 0 :(得分:1)
最坏的情况是,如果n> m,则第一个(m-1)个元素相等,而最后一个元素arr1[m - 1]
大于arr2
的所有其余元素。然后,第一个if
将始终失败,代码将必须通过arr2
的所有元素,从而进行(2 * n)个比较。
但是Big O表示法并不表示确切的操作数,而是表示rate of its growth。在这些术语中,该算法相对于整个输入的长度仍然是线性的,写为O(n)。