我想知道这段代码的Big-O是什么
static boolean mysterious(int[] w) {
int anz = w.length;
int i = 0;
int j = anz - 1;
while (i < j) {
if (w[i] != w[j]) {
return false;
}
i++;
j--;
}
return true;
}
我会说这是O(j),但我不太确定。
感谢您的帮助!
答案 0 :(得分:1)
i
和j
开始指向数组w
的任一端,i
向前移动,j
向后移动。在每一步中,我们都会比较i
和j
引用的元素。所以,它是O(w.length)
渐近
答案 1 :(得分:0)
我们可以在这里谈论最佳/最差案例表现。最佳案例性能为O(1)
,如果数组输入的第一个和最后一个元素不相等,则会出现这种情况。
在最坏的情况下,N/2
循环会有while
次迭代。如果数字数组不包含关于不是回文的中间元素的任何子数组,则会发生这种情况。所以在最坏的情况下,函数是O(N)
,其中N
是数组的长度。