我编写的代码如下所示,但我对此算法的复杂性是O(n)还是O(n 2 )感到困惑。任何人都能确认一下吗?
for(int i=0, j=i+1;i<array.length;j++)
{
if(j==array.length)
{
if(array[i]==3)
System.out.println(array[i]);
i++;
j=i;
continue;
}
int k=array[i]+array[j];
if(k==3)
{
System.out.println("{"+array[i]+","+array[j]+"}");
}
}
答案 0 :(得分:4)
唯一重要的部分是:
for (int i=0, j=i+1; i < array.length; j++)
{
if (j == array.length)
{
...
i++;
j=i;
continue;
}
...
}
循环正在j = i+1
到j == array.length
;然后i
递增,j
上的循环重复。
因此,这是一个O(n 2 )算法。
答案 1 :(得分:2)
是O(n ^ 2),
i = 0;
j = 1;==>j =array.length.
i = 1;
j = 1;==>j =array.length.
i = 2;
j = 2;==>j =array.length.
...
i = n;
j = n;==>j =array.length.
...
i = array.length;
j =array.length.
所以,循环运行 n(n-1)/ 2 次。它是O(n ^ 2)。
以下是O(n ^ 2):
for(i=0;i<n;++i)
{
for(j = 0; j<n;++j)
{
if(...)
...
else
...
...
}
}
答案 2 :(得分:2)
是O(n^2)
。 i
仅在j
遍历整个数组后递增。这发生在循环的每次迭代中,每次迭代输入变小1。所以n*(n-1)/2
次,O(n^2)
。
答案 3 :(得分:2)
这是O(n^2)
。
从i=0
开始:对于j = 1 - &gt; array.length =&gt; n interations
步骤2:i = 1 =&gt;对于j = 2 - &gt; array.length =&gt; n - 1次迭代
...
步骤n-1:i = array.length - 2 =&gt;对于j = array.length - 1 - &gt; array.length =&gt; 1次迭代
因此,复杂度为n * (n + 1) / 2
,即n^2
。
答案 4 :(得分:1)
这是O((n(n + 1))/ 2)
是O(n ^ 2)