【发布时间】:2017-02-26 11:50:03
【问题描述】:
-1 -3 -2 -3 -2 -1
2 3 -2 -2 2 3
5 7 4 4 5 7
(Orignal) (Sorted)
我可以仅基于行或仅列对矩阵进行排序。 但是考虑到列和行,我无法获得对矩阵进行排序的最佳解决方案。
有什么建议可以实现吗?
【问题讨论】:
-1 -3 -2 -3 -2 -1
2 3 -2 -2 2 3
5 7 4 4 5 7
(Orignal) (Sorted)
我可以仅基于行或仅列对矩阵进行排序。 但是考虑到列和行,我无法获得对矩阵进行排序的最佳解决方案。
有什么建议可以实现吗?
【问题讨论】:
您可以将任何二维数组转换为一维数组,并且易于排序。
您不必实际更改 2D 数组,只需使用索引即可:
[0][0] = [0]
[1][0] = [length]
[N][K] = [(length*N) + K]
【讨论】:
row 进行排序。
-1 -3 -2 2 3 -2 5 7 4 Orignal matrix Array -3 -2 -2 -1 2 3 4 5 7 Orignal Sorted Array 如何从中获得解决方案? ://
使用这两个函数:
public static void sortRows(int[][] matrix){
for (int i = 0; i < matrix.length; i++) {
Arrays.sort(matrix[i]);
}
}
public static void transpose(int[][] matrix){
for (int i = 0; i < matrix.length; i++) {
for (int j = i; j < matrix[0].length; j++) {
int tmp1 = matrix[i][j];
int tmp2 = matrix[j][i];
matrix[j][i] = tmp1;
matrix[i][j] = tmp2;
}
}
}
您可以对行进行排序,转置矩阵,再次对行进行排序(转置列)并将其转回:
int[][] matrix = {{-1, -3, -2}, {2, 3, -2}, {5, 7, -4}};
sortRows(matrix);
transpose(matrix);
sortRows(matrix);
transpose(matrix);
【讨论】: