我想在Java中循环一半的数组;这是因为矩阵将是完全对称的。如果我循环抛出i列和j行,每次我执行矩阵[i] [j]的操作时,我将对矩阵[j] [i]执行完全相同的操作。我应该能够通过不循环一半矩阵来节省时间。有关最简单方法的任何想法吗?
答案 0 :(得分:7)
如果你想得到一个三角形:
for(int i=0; i<array.length; i++){
for(int j=0; j<=i; j++){
..do stuff...
}
}
答案 1 :(得分:0)
for (i = 0;i < size; ++i) {
for (j = 0; j < i; ++j) {
result = do_operation(i,j);
matrix[i][j] = result;
matrix[j][i] = result ;
}
}
因此,您只为每对调用一次操作方法do_operation。
答案 2 :(得分:0)
for(int i = 0; i<array.length; i++){
for(int j = 0; j < array[i].length - i; j++){
// operation here
}
}
答案 3 :(得分:0)
也许我在这里遗漏了一些东西,但是假设你有两个数组分别代表你的行和列,并假设它是对称的(如你所说):
int dimension = rows.Length;
for(int i=0; i<dimension; i++)
{
int j = (dimension-1) - i; //need dimension-1 to avoid an off-by-one error
DoSomething(matrix[i][j]);
DoSomehting(matrix[j][i]);
}
此解决方案具有运行时复杂性优势,只能迭代一个循环而不是两个循环。