java - 解释大 O 循环和数组

标签 java arrays time big-o

所以,我知道我的想法是错误的,但我对所有三段代码的回答是它们的复杂度是 O(n^2)。

谁能告诉我我是否错了?

如果是的话,你能帮我想想如何解决类似的问题吗?预先感谢您!

    public static int firstLoop(int[] arr) { 

       int sum = 0; int n = arr.length; 
       int limit = n * n; 
       for ( int j = 0; j < limit; j += 2 ) { 
          sum = (sum + arr[j / n] ) % 100; 
      } 
   return sum; }


     public static int withLoop(int[] arr) { 

    int sum = 0; int n = arr.length; 
    int j = 1; 
    int limit = n * n; 
    for ( j= limit - 1; j > 0; j /= 2 ) { 
    sum = (sum + arr[j / n] ) % 100; } 
    return sum; }

   public static int fwLoop(int[] arr)

    {  int sum = 0; 
      int n = arr.length; 
      int limit = n * n; 
      for ( int k = 0; k < limit; k += 2 ) { 
       int t = 1; for ( j = limit - 1; j > 0; j /= 2 ) { 
       t = (t + arr[j / n] ) % 100; 
      } sum = (sum + t + arr[k / n] ) % 200; 
    } return sum; 
 }

最佳答案

  1. 正如您所说,第一段代码的运行时间为 O(n^2),因为 limit 的大小为 n^2

  2. 第二个执行j/=2,每次将limit的长度除以2,因此循环将运行k次,其中k=log(n^2) = 2log(n),因此它的顺序是O(log(n))

  3. 第三个是第一个和第二个的组合,它的运行时间为O((n^2)*log(n))时间

关于java - 解释大 O 循环和数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43579672/

相关文章:

java - Apache Camel 与构造函数注入(inject)

java - Springboot应用类中初始化Service类和Repository类

python - 在 NumPy 数组上使用 += 的意外结果

android - 如何在android中找到今天或昨天的时间

java - Hibernate 多对多 - 保存时未填充连接表

java - 重命名目录中多个文件的脚本或java程序

arrays - 如何成对循环遍历数组?

JavaScript 循环以错误的顺序执行

c++ - 不间断执行 Cpp Linux 代码

java - 根据用户的语言环境和偏好格式化日期和时间