Java 大O分析-While循环
我得到一个编程问题,给定一个数组,确定它是否是二叉树的后序遍历。我的解决办法如下:Java 大O分析-While循环,java,binary-search-tree,Java,Binary Search Tree,我得到一个编程问题,给定一个数组,确定它是否是二叉树的后序遍历。我的解决办法如下: public static boolean isPostOrder(int[] array) { int root = array[array.length - 1]; int i = 0; while(array[i] < root) { i++; } while(array[i] > root) { i++;
public static boolean isPostOrder(int[] array) {
int root = array[array.length - 1];
int i = 0;
while(array[i] < root) {
i++;
}
while(array[i] > root) {
i++;
}
return i == array.length - 1;
}
public静态布尔isPostOrder(int[]数组){
int root=array[array.length-1];
int i=0;
while(数组[i]<根){
i++;
}
while(数组[i]>根){
i++;
}
返回i==array.length-1;
}
我正在努力理解Big O。我已经阅读了本教程:
然而,我仍然对加法和while循环感到困惑。在本例中,我假设while循环是O(1),因为我们只是将数组中的值与整数进行比较,还是我错了
现在加法也是O(1),因为我们只是把1加到某个整数1上,对吗
因此,这是O(1)解决方案还是我遗漏了什么?算法运行时与输入大小有一个线性连接,因为您循环了输入数组的元素。这使得你的算法是O(n)。如果没有任何循环,那么应该是O(1)=恒定访问时间 Big-O表示法背后的基本思想是估计算法执行的基本操作的数量,以及输入的大小如何影响它
这里,您的基本操作是递增i(
++i
)。迭代一个大小为N的数组,在最坏的情况下,遍历所有数组。因此,该算法具有O(N)复杂度。O(1)是恒定的访问时间。你是在迭代,不是吗?你给出的标准while循环被认为是O(n)。加法为O(1)。如果你再做一次,那就是O(1)。如果你做某事n次,那就是O(n)。啊,好的。我也意识到我对这个问题的解决方案也不正确。谢谢