这种就地阵列反转的时间复杂度是多少?

时间:2016-12-08 19:15:10

标签: javascript algorithm time-complexity

此函数是O(n)还是O(log(n))时间复杂度。

function reverse(array) {
  for (var i = 0, j = array.length - 1; i < j; i++, j--) {
    var temp = array[i];
    array[i] = array[j];
    array[j] = temp;
  }

  return array;
}

乍一看,似乎是在输入上进行了n / 2次迭代。但是,如果你考虑一下,实际的低级操作数就接近2n。

1 个答案:

答案 0 :(得分:1)

假设您有一个长度为n的字符串 然后你有指标i=0j = n-1 循环继续,直到i>=jj递减1,i递增1 这将为您提供总共n/2次迭代。 在循环内部,您总共有3个语句,这意味着循环将完成总共3(n/2)。除此之外,你在循环外面有一个操作,只剩下

f(n) = 3(n/2)+1 which is O(n)

编辑:这假设循环维护操作(i++j--)是微不足道的,这在处理Big Oh表示法时很常见