如何将总和为负的列移动到最后?
How to move columns whose sum is negative to the end?
例如:我有一个数组:
int[][] arr = {{-3,1,-5,2,-1},
{-3,1,-5,2,-2},
{-3,1,-5,2,-3}};
我需要得到这样一个数组:
int[][] arr = {{1,2,-3,-5,-1},
{1,2,-3,-5,-2},
{1,2,-3,-5,-3}};
我希望该程序对任何双精度数组都是通用的。
有什么想法吗?
这是一种方法。这仅适用于矩形阵列,因为如果任何正总和列短于负总和列,则不可能保持列对齐。
int[][] arr = { { -3, 1, -5, 2, -1 },
{ -3, 1, -5, 2, -2 },
{ -3, 1, -5, 2, -3 } };
首先创建一个列总和数组。
int[] colsum = new int[arr[0].length];
for (int col = 0; col < arr[0].length; col++) {
for (int row = 0; row < arr.length; row++) {
colsum[col] += arr[row][col];
}
}
然后,创建一个结果数组以根据列总和复制列。
为了保留相同符号列的相对列顺序,使用了两个循环。第一个从右到左。第二个从左到右,但也会在到达之前添加的负数列后停止。
int[][] result = new int[arr.length][arr[0].length];
int rearLoc = arr[0].length-1;
int forwardLoc = 0;
for (int col = arr[0].length-1; col >= 0; col--) {
if (colsum[col] < 0) {
for (int row = 0; row < arr.length; row++) {
result[row][rearLoc] = arr[row][col];
}
rearLoc--;
}
}
for (int col = 0; forwardLoc <= rearLoc && col < arr[0].length; col++) {
if (colsum[col] >= 0) {
for (int row = 0; row < arr.length; row++) {
result[row][forwardLoc] = arr[row][col];
}
forwardLoc++;
}
}
for (int[] a : result) {
System.out.println(Arrays.toString(a));
}
版画
[1, 2, -3, -5, -1]
[1, 2, -3, -5, -2]
[1, 2, -3, -5, -3]
例如:我有一个数组:
int[][] arr = {{-3,1,-5,2,-1},
{-3,1,-5,2,-2},
{-3,1,-5,2,-3}};
我需要得到这样一个数组:
int[][] arr = {{1,2,-3,-5,-1},
{1,2,-3,-5,-2},
{1,2,-3,-5,-3}};
我希望该程序对任何双精度数组都是通用的。
有什么想法吗?
这是一种方法。这仅适用于矩形阵列,因为如果任何正总和列短于负总和列,则不可能保持列对齐。
int[][] arr = { { -3, 1, -5, 2, -1 },
{ -3, 1, -5, 2, -2 },
{ -3, 1, -5, 2, -3 } };
首先创建一个列总和数组。
int[] colsum = new int[arr[0].length];
for (int col = 0; col < arr[0].length; col++) {
for (int row = 0; row < arr.length; row++) {
colsum[col] += arr[row][col];
}
}
然后,创建一个结果数组以根据列总和复制列。 为了保留相同符号列的相对列顺序,使用了两个循环。第一个从右到左。第二个从左到右,但也会在到达之前添加的负数列后停止。
int[][] result = new int[arr.length][arr[0].length];
int rearLoc = arr[0].length-1;
int forwardLoc = 0;
for (int col = arr[0].length-1; col >= 0; col--) {
if (colsum[col] < 0) {
for (int row = 0; row < arr.length; row++) {
result[row][rearLoc] = arr[row][col];
}
rearLoc--;
}
}
for (int col = 0; forwardLoc <= rearLoc && col < arr[0].length; col++) {
if (colsum[col] >= 0) {
for (int row = 0; row < arr.length; row++) {
result[row][forwardLoc] = arr[row][col];
}
forwardLoc++;
}
}
for (int[] a : result) {
System.out.println(Arrays.toString(a));
}
版画
[1, 2, -3, -5, -1]
[1, 2, -3, -5, -2]
[1, 2, -3, -5, -3]