根据Big-O表示法,以下方法的时间复杂度是多少?

时间:2014-02-23 13:35:21

标签: algorithm methods big-o time-complexity

帮助我解决下面这个方法的时间复杂性:

void method(int n, int[] array)
{
  int i = 0, j = 0;

  for(; i < n; ++i)
  {
    while(j < n && array[i] < array[j])
    {
      j++;
    }
  }
}

1 个答案:

答案 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)。