我很难为这个while循环结束Big-O表示法,其中N是输入大小:
int array[0][(N-1)/2] = 1;
int key = 2,k,l;
i = 0;
int j = (N-1)/2;
while(key <= N*N)
{
if(i <= 0)
k = N-1;
else
k = i-1;
if(j <= 0)
l = N-1;
else
l = j-1;
if(array[k][l])
i = (i+1)%N;
else
{
i = k;
j = l;
}
array[i][j] = key;
key++;
}
I concluded it as O(N2)
因为当N = 5时,它迭代直到N * N,即5 * 5 = 25次,但我仍然对循环内的其余代码感到困惑。如果有人可以逐步解释代码,我会非常感激。这个循环只是一个更大的函数的一部分,它有4个循环,我理解但不是这个循环。
答案 0 :(得分:1)
你应该关心的是, k 如何变化。它在每次迭代中增加一个,这里没有捷径。
所以它只是O(N 2 )。