【发布时间】:2011-03-03 14:52:58
【问题描述】:
我想将数组中的每个项目与所述数组中的每个其他项目进行比较。我现在正在这样做,可以吗?还是有更漂亮/更快/更合乎逻辑的方法?
for(int i=0; i<array1.size(); i++){
for(int j=0; j<array1.size(); j++){
if(i!=j){
..do stuff..
}
}
}
【问题讨论】:
我想将数组中的每个项目与所述数组中的每个其他项目进行比较。我现在正在这样做,可以吗?还是有更漂亮/更快/更合乎逻辑的方法?
for(int i=0; i<array1.size(); i++){
for(int j=0; j<array1.size(); j++){
if(i!=j){
..do stuff..
}
}
}
【问题讨论】:
您进行了太多比较,而且您将每个项目都与自身进行了不必要的比较。你想要的是这样的:
for(int i=0; i<array1.size(); i++){
for(int j=i + 1; j<array1.size(); j++){
if(arr[i] != arr[j]){
..do stuff..
}
}
}
(假设您的平等概念是commutative,通常是平等。)
如果您的数组中有 N 个项目,那么您的原始 sn-p 将进行 N^2 比较,而我的 sn-p 将进行 N(N-1)/2 比较。
【讨论】:
如果你的比较关系是symmetrical,你可以取消
for(int i = 0; i < array1.size(); i++) {
// Note the initial value of j
for(int j = i + 1; j < array1.size(); j++) {
if (i != j) {
..do stuff..
}
}
}
另一种风格(减少缩进)是做
for(int i = 0; i < array1.size(); i++) {
// Note the initial value of j
for(int j = i + 1; j < array1.size(); j++) {
if (i == j)
continue;
..do stuff..
}
}
【讨论】:
就速度而言,您可以循环直到j < i 而不是内部子句中的整个数组,这应该涵盖您。
例如,如果数组 = [1,2,3,4] 你会得到
所以所有的都是比较的。
【讨论】:
我不明白为什么那行不通。
虽然我一直认为你必须在数组上调用 .length(因为它是一个字段而不是一个方法)。
【讨论】: