帮助我解决下面这个方法的时间复杂性:
void method(int n, int[] array)
{
int i = 0, j = 0;
for(; i < n; ++i)
{
while(j < n && array[i] < array[j])
{
j++;
}
}
}
答案 0 :(得分:2)
运行时为O(n)。
在外循环的某些迭代中,内循环可能会进行多次,而在另一次循环中它可能根本不会进展,但总共n
增加j
次增加i
。因为这与发生这种情况的时间(n
的值)无关,你可能会说外环的O(n)加上O(n)的(最多)j
增加n
。 O(n)+ O(n)= O(n)。
这与典型的“循环内循环”相反,后者将对外循环的每次迭代执行内循环的{{1}}次迭代,因此为O(n)* O (n)= O(n ^ 2)。