Java 如何降低这部分代码的复杂性?
此代码打印数组“pts”中存在的元素组合(一次4个元素),以使特定的数字组合不会出现多次。如果1234已经打印出来,那么它的任何排列都不应该被打印出来Java 如何降低这部分代码的复杂性?,java,algorithm,time-complexity,Java,Algorithm,Time Complexity,此代码打印数组“pts”中存在的元素组合(一次4个元素),以使特定的数字组合不会出现多次。如果1234已经打印出来,那么它的任何排列都不应该被打印出来 for (int i = 0; i < pts.length; i++) { for (int j = i+1; j < pts.length; j++) { for (int k = j+1; k < pts.length; k++) { for (int l = k+1
for (int i = 0; i < pts.length; i++) {
for (int j = i+1; j < pts.length; j++) {
for (int k = j+1; k < pts.length; k++) {
for (int l = k+1; l < pts.length; l++) {
System.out.println(""+pts[i]+" "+pts[j]+" "+pts[k]+" "+pts[l]);
}
}
}
}
for(int i=0;i
如果有人可以建议其他方法,或者告诉我如何降低代码的复杂性。我将很感激你没有什么可以改进的。输出为O(n^4)。复杂性在于问题陈述,而不是这个循环的实现。你应该研究一下为什么要用i
for (int l = 0; l < pts.length; l++) {
for (int k = 0; k < l; k++) {
for (int j = 0; j < k; j++) {
for (int i = 0; i < j; i++) {
System.out.println(""+i+" "+j+" "+k+" "+l);
}
}
}
}
for(int l=0;l
注意,它改变了生成集的顺序,我不知道这是否重要。无论如何,这只是一个小小的改进。不,这是你能做的最好的了。除了可读性之外,不可能有任何改进。不要添加那些糟糕的“//k”注释-它们只会使代码混乱,而不会添加信息。结果中的每件事情都会执行一个println命令。在不忽略结果的情况下,它怎么可能小于这个值呢?您实际上从未使用存储在
pts
数组中的任何值。这是有意的吗?如果这是一场比赛,你一定要提到你将如何处理比赛结果。你不应该只打印它们。如果涉及到一些计算,很可能有一个技巧,允许您根据外部循环的当前值快速跳过一些内部循环。@Marco下面是问题的完整描述。。。。由于这是一个现场比赛的问题,我不想让你给出一个完整的逻辑描述。请帮助我如何在不考虑重复组合的情况下一次选择4个点的组合。这是我解决这个问题的办法