我想知道是否有一种减少二维数组中所有非零元素的行索引的好方法。例如,要将所有非零元素移到左侧:
[0, 1, 0, 1, 1] =>
[1, 0, 1, 1, 0]
这样做的简单算法显然是:
for (int[] row : array) {
for (int i = 0; i < row.length - 1; i++) {
row[i] = row[i + 1];
}
row[row.length - 1] = 0;
}
我也可以这样做:
for (int[] row : array) {
System.arraycopy(row, 1, row, 0, row.length - 1);
row[row.length - 1] = 0;
}
从 index 向下移动所有元素的简单算法:
for (int col = 0; col < arr[0].length; col++) {
for (int row = index; row > 0; row--) {
arr[row][col] = arr[row - 1][col];
}
}
但是,当使用行索引执行此操作时,我不能System.arraycopy
。
现在我想知道的是,除了像上面那样循环遍历整个矩阵之外,是否有更好的方法将元素向下移动?
答案 0 :(得分:1)
现在我想知道的是,是否有更好的方法可以将元素向下移动,而不是像上面那样循环遍历整个矩阵?
更好地定义: - )。
没有办法摆脱可以提高性能或(IMO)可读性的外循环。
对于内部循环,如果数组很小,使用arraycopy的性能优势可能很小......甚至是负数。
如果您有证据表明性能确实会产生实际影响,那么我建议:
对代码进行分析以验证这一点。
尝试两种(和其他)替代方案以及衡量对整个应用程序的影响。