因此,基本上我想在第二个数组中查找所有小于或等于第一个数组的元素。两个数组都已排序。我知道解决办法。我不要 我只想知道该程序的时间复杂度以及我们将如何计算它。预先谢谢你。
int count=0;
for(int i=0;i<n;i++)
{
for(int j=count;j<m;j++)
{
if(arr[i]>=arr[j])
//some O(1) code
else
{
count=j;
break;
}
}
}
答案 0 :(得分:3)
复杂度将为 O(n * m),因为每个n
值的外部循环将运行m
次。
答案 1 :(得分:2)
在您的代码中只有一个数组。与您的解释相反,其中有两个数组。
假设有一个错字,并且应该有第二个数组:
最差:您可以在O(n * m)处确定上限。如果第二个元素都比第一个元素小,就会发生。
最佳:您可以在O(n)处确定下限。 如果第二个元素的所有元素都大于第一个元素,则发生(第一个元素破坏了循环)。
平均值:如果假设分布均匀,则平均值为O(n * m / 2)。
结论是O(n²)联赛算法。
仅一个数组:
但是,如果我采用“按原样”的代码-只有一个数组,并且还要考虑到它的排序方式:
如果i
撤销订单
所以arr [i]
它将跳过j
但是我想这是一个错别字,您提到了两个数组,所以我跳过了用重复项排序的情况(再次是O(n * m),例如,如果所有元素都相同)。
答案 2 :(得分:1)
O(n * m)-因为要遍历'n'个外部元素 对于每个外部元素,您都有一个包含m个元素的内部循环。 For循环的时间复杂度-O(n)。基本上,for循环将运行多少次。
答案 3 :(得分:0)
复杂度: O(m * n)
由于其中涉及两个for循环,因此在不同情况下可能有所不同,但是如果两个都执行,则必须为O(m*n)
。