让我们假设我想检查Object数组中的值是否属于超类或子类,例如我的超类叫Called Animal,我声明了一个类型为Animal的数组
Animal myAnimals[] = new Animal[];
Run Code Online (Sandbox Code Playgroud)
现在假设有像Lion,Tiger,Elephant等动物的子类.如果我要遍历数组,我如何区分子类(Lion,Tiger等)和超类Animal?谢谢!
我试图测量以下算法的大O复杂度:
int sumSome(int[] arr){
int sum = 0;
for (int i=0; i<arr.length; i++) {
for (int j=1; j<arr.length; j = j*2) {
if (arr[i] > arr[j])
sum += arr[i];
}
}
return sum;
}
Run Code Online (Sandbox Code Playgroud)
现在从我的理解,
if (arr[i] > arr[j])
sum += arr[i];
Run Code Online (Sandbox Code Playgroud)
O(1)有很大的O,因为它是常数并且没有任何事情发生,但是听起来它的for循环虽然我很难分辨它的Big-O表示法.我认为
for (int j=1; j<arr.length; j = j*2) {
if (arr[i] > arr[j])
sum += arr[i];
}
Run Code Online (Sandbox Code Playgroud)
是一个线性函数O(n),因为j可能是1但它在O(2n)处以线性方式上升,这只是O(n).那么整个算法不是O(n ^ 2)吗?显然我没有在MOOC考试中正确回答这个问题.谢谢!