[英]Big-O Analysis - While Loops
给我一个编程问题,给定一个数组,确定它是否是二叉树的后遍历。 我的解决方案如下:
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;
}
我正在尝试了解BigO。我已阅读此教程:
但是,我仍然对加法和while循环感到困惑。 我假设在这种情况下,我的while循环是O(1),因为我们只是将数组中的值与整数进行比较,还是我错了?
现在加法也是O(1),因为我们只是将1加到某个整数1上,对吗?
因此,这是O(1)解决方案还是我错过了什么?
您的算法运行时与输入大小有线性关系,因为您在输入数组的元素之间循环。 这使得您的算法为O(n)。 如果您没有任何循环,那将是O(1)=恒定的访问时间。
Big-O表示法的基本思想是估计算法执行的基本运算的数量,以及输入的大小如何影响它。
在这里,您的基本操作是增加i( ++i
)。 您正在遍历大小为N的数组,在最坏的情况下,将遍历所有大小。 因此,该算法具有O(N)复杂度。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.