Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 一个for循环中两个for循环的运行时复杂性_Java_Data Structures_Runtime_Big O - Fatal编程技术网

Java 一个for循环中两个for循环的运行时复杂性

Java 一个for循环中两个for循环的运行时复杂性,java,data-structures,runtime,big-o,Java,Data Structures,Runtime,Big O,我正在编写一个java方法,用于查找数组的稳定性索引。我的算法运行良好,但我不确定它的运行时复杂性。我相信它是O(n),因为第一个循环是O(n),两个内环是O(2n),但我还是不确定 int[] arr = {0, -3, 5, -4, -2, 3, 1, 0}; for(int num = 0; num < arr.length; num++){ int sumLeft= 0; int sumRight = 0; for(int i = 0; i<num;

我正在编写一个java方法,用于查找数组的稳定性索引。我的算法运行良好,但我不确定它的运行时复杂性。我相信它是O(n),因为第一个循环是O(n),两个内环是O(2n),但我还是不确定

int[] arr = {0, -3, 5, -4, -2, 3, 1, 0};

for(int num = 0; num < arr.length; num++){
    int sumLeft= 0;
    int sumRight = 0;
    for(int i = 0; i<num; i++){
        sumLeft= sumLeft + arr[i];
    }
    for(int i = num + 1; i < arr.length;i++){
        sumRight= sumRight + arr[i];
    }
    if(sumLeft==sumRight){
        System.out.println(num);
    }
}
它是O(n^2)

for(int num=0;num
  • 我们可以给你一个答案,答案是
    O(N^2)

  • 我们可以为你自己解释如何解决这个问题

计算的方法是计算操作数

当我说“计数”时,我并不是字面上的意思。我真正的意思是,你需要计算出一个代数公式,计算一些指示性操作被执行的次数

因此,在你的例子中,我认为这两种说法是最重要的:

      sumLeft= sumLeft + arr[i];

      sumRight= sumRight + arr[i];
(我为什么选择这些陈述?直觉/经验!学究式的方法是计算所有操作。但是有了经验,你可以选择重要的操作…其余的都不重要。)

现在,对于公式:

  • 在外循环的一次迭代中,第一条语句从
    0执行到num-1
    ;即
    num

  • 在外循环的一次迭代中,第二条语句从
    num+1执行到array.length-1
    ;即
    array.length-num-1

  • 因此,在外循环的一次迭代中,这两条语句被执行
    num+array.length-num-1
    次,这将减少到
    array.length-1

  • 但是外部循环运行
    array.length
    次,因此这两条语句执行
    array.length x(array.length-1)

  • 最后,根据大Oh的定义,
    array.length x(array.length-1)
    属于复杂性类
    O(N^2)
    ,其中
    N
    是数组大小。

    是O(N^2)-N个元素被检查N次。
    for(int num = 0; num < arr.length; num++){
        int sumLeft= 0;
        int sumRight = 0;
        for(int i = 0; i<num; i++){// <------------- 1 ~ n
        //https://en.wikipedia.org/wiki/1_%2B_2_%2B_3_%2B_4_%2B_%E2%8B%AF
            sumLeft= sumLeft + arr[i];
        }
        for(int i = num + 1; i < arr.length;i++){
            sumRight= sumRight + arr[i];
        }
        if(sumLeft==sumRight){
            System.out.println(num);
        }
    }
    
          sumLeft= sumLeft + arr[i];
    
          sumRight= sumRight + arr[i];