【发布时间】:2020-07-03 18:42:19
【问题描述】:
我有一个 n 个字符的数组。为了计算数组的总和,我使用了以下代码 sn-p:
var arr = [1,2,3,4,5,6]
var i = 0;
var j = arr.length - 1;
var sum = 0;
while(i<j || i==j){
sum = sum + ((i==j) ? arr[i] : arr[i] + arr[j])
i++;
j--;
}
我使用了两个指针 i 和 j 从两个方向遍历数组并找到总和。我想知道这是否是一种正确的方法,它是否以 O(log n) 时间复杂度运行?
谢谢
【问题讨论】:
-
您的代码以 n/2 => O(n) 时间复杂度运行。
-
您可以简单地在您的 while 循环中放置一个计数器。对于 100 的数组,该计数器将是 50,而如果它是 O(log n),它将更接近
Math.log2(100)~= 6。如果您可以在O(log n)中为任意数组执行此操作,您会出名的。 -
由于您需要读取所有 n 个值来计算总和,因此无论您读取这些值的顺序如何,您都不可能低于 O(n)。跨度>
标签: javascript arrays data-structures time-complexity big-o