Java 是什么使这种方法比这种方法更好?

Java 是什么使这种方法比这种方法更好?,java,arrays,for-loop,big-o,Java,Arrays,For Loop,Big O,唯一的区别是,第一个循环中的嵌套for循环的值为i+1,而不是仅为+1(第二个)。为什么第一个被认为比第二个好 int[]nums={3,2,4}; int目标=6; 对于(int i=0;i

唯一的区别是,第一个循环中的嵌套for循环的值为i+1,而不是仅为+1(第二个)。为什么第一个被认为比第二个好

int[]nums={3,2,4};
int目标=6;
对于(int i=0;i
int[]nums={3,2,4};
int目标=6;
对于(int i=0;i
这两个代码在我看来并不相同。然而,正如你在评论中所说,我正在努力弄清楚。

就运行时间而言,在第一个代码中,嵌套for循环的
运行
nums.length-(i+1)
次。这里是嵌套for循环运行
0
次的最佳情况,以及运行
nums.length-1
次的最坏情况

int[] nums = { 3, 2, 4 };
int target = 6;

for (int i = 0; i < nums.length; i++) {
    for (int j = i + 1; j < nums.length; j++) {
        int answer = nums[i]+nums[j];
        System.out.println(answer);//answer should be value of target
    }
}
int[] nums = { 3, 2, 4 };
int target = 6;

for (int i = 0; i < nums.length; i++ ) {
    for (int j = 1; j < nums.length; j++) {
        int answer = nums[i]+nums[j];
        System.out.println(answer);//answer should be value of target
    }
}

因此,根据
最佳和最坏情况下的情况
我们可以说第一种代码更有效。

这两种代码在我看来并不相同。然而,正如你在评论中所说,我正在努力弄清楚。

就运行时间而言,在第一个代码中,嵌套for循环的
运行
nums.length-(i+1)
次。这里是嵌套for循环运行
0
次的最佳情况,以及运行
nums.length-1
次的最坏情况

int[] nums = { 3, 2, 4 };
int target = 6;

for (int i = 0; i < nums.length; i++) {
    for (int j = i + 1; j < nums.length; j++) {
        int answer = nums[i]+nums[j];
        System.out.println(answer);//answer should be value of target
    }
}
int[] nums = { 3, 2, 4 };
int target = 6;

for (int i = 0; i < nums.length; i++ ) {
    for (int j = 1; j < nums.length; j++) {
        int answer = nums[i]+nums[j];
        System.out.println(answer);//answer should be value of target
    }
}

因此,根据
最佳和最坏情况下的情况,我们可以说第一个代码更有效。

第一个代码样本中的迭代次数是序列的总和:
n-1,n-2。。。1
也就是说,它是n-1
元素算术级数的总和:

S = (1 + n - 1) * (n - 1) / 2 = n * (n - 1) / 2 = (n^2 - n) / 2

第二个代码样本中的迭代次数是
n*(n-1)=n^2-n
,也就是说,它的迭代次数是第一个样本的两倍


然而,在估计复杂度(big-O)时,诸如2和低阶表达式之类的常量值被省略,因此在这两种情况下
O(N)=N^2
第一个代码样本中的迭代次数是序列的总和:
N-1,N-2。。。1
也就是说,它是n-1
元素算术级数的总和:

S = (1 + n - 1) * (n - 1) / 2 = n * (n - 1) / 2 = (n^2 - n) / 2

第二个代码样本中的迭代次数是
n*(n-1)=n^2-n
,也就是说,它的迭代次数是第一个样本的两倍


然而,在估计复杂度(big-O)时,诸如2和低阶表达式之类的常量值被省略,因此在这两种情况下
O(N)=N^2

谁说它更好?他们在计算不同的东西
intj=i
vs
intj=2
是一个巨大的差异。代码试图实现什么?这两个代码做的事情不同!你怎么说一个比另一个好?对不起大家。小误差第一个假设为j=i+1,第二个假设为j=1。我更新了,现在请看。再次抱歉。你能坐飞机吗?这个计划的目的是什么?谁说它更好?他们在计算不同的东西
intj=i
vs
intj=2
是一个巨大的差异。代码试图实现什么?这两个代码做的事情不同!你怎么说一个比另一个好?对不起大家。小误差第一个假设为j=i+1,第二个假设为j=1。我更新了,现在请看。再次抱歉。你能坐飞机吗?这个节目的目的是什么?