小编Lin*_*00b的帖子

检查数组中的元素是否是Java中的SubClass

让我们假设我想检查Object数组中的值是否属于超类或子类,例如我的超类叫Called Animal,我声明了一个类型为Animal的数组

Animal myAnimals[] = new Animal[];
Run Code Online (Sandbox Code Playgroud)

现在假设有像Lion,Tiger,Elephant等动物的子类.如果我要遍历数组,我如何区分子类(Lion,Tiger等)和超类Animal?谢谢!

java arrays object

6
推荐指数
1
解决办法
1313
查看次数

如何衡量该算法的时间复杂度(Big-O)?

我试图测量以下算法的大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考试中正确回答这个问题.谢谢!

java algorithm big-o time-complexity asymptotic-complexity

2
推荐指数
2
解决办法
557
查看次数