Java 是什么使这种方法比这种方法更好?
唯一的区别是,第一个循环中的嵌套for循环的值为i+1,而不是仅为+1(第二个)。为什么第一个被认为比第二个好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
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
vsintj=2
是一个巨大的差异。代码试图实现什么?这两个代码做的事情不同!你怎么说一个比另一个好?对不起大家。小误差第一个假设为j=i+1,第二个假设为j=1。我更新了,现在请看。再次抱歉。你能坐飞机吗?这个计划的目的是什么?谁说它更好?他们在计算不同的东西intj=i
vsintj=2
是一个巨大的差异。代码试图实现什么?这两个代码做的事情不同!你怎么说一个比另一个好?对不起大家。小误差第一个假设为j=i+1,第二个假设为j=1。我更新了,现在请看。再次抱歉。你能坐飞机吗?这个节目的目的是什么?