如何按每列负奇数的和对Java二维矩阵进行升序排序
实现方案
核心思路
要完成按列的负奇数总和升序排序,只需按以下两步实现:
- 先遍历矩阵计算每一列的负奇数总和,存储为单独的数组
- 基于总和数组的升序排序结果,重排矩阵的对应列
完整的sortMatrix方法实现
直接把以下代码填入空的sortMatrix方法即可:
static void sortMatrix(int[][] matrix) { int size = matrix.length; // 1. 计算每一列的负奇数总和 int[] colSum = new int[size]; for (int j = 0; j < size; j++) { int sum = 0; for (int i = 0; i < size; i++) { int num = matrix[i][j]; // 判定是否为负奇数 if (num < 0 && num % 2 != 0) { sum += num; } } colSum[j] = sum; } // 2. 生成排序后的列索引:按照colSum升序排列对应列下标 Integer[] colIndex = new Integer[size]; for (int i = 0; i < size; i++) { colIndex[i] = i; } Arrays.sort(colIndex, (a, b) -> colSum[a] - colSum[b]); // 3. 根据排序后的索引重排矩阵列 int[][] newMatrix = new int[size][size]; for (int j = 0; j < size; j++) { int originCol = colIndex[j]; for (int i = 0; i < size; i++) { newMatrix[i][j] = matrix[i][originCol]; } } // 4. 把排序后的矩阵内容写回原参数 for (int i = 0; i < size; i++) { System.arraycopy(newMatrix[i], 0, matrix[i], 0, size); } }
逻辑说明
- 计算列总和时优先遍历列下标j,再遍历行下标i,即可逐列统计所有元素
- 生成排序索引时不直接修改原矩阵,先记录排序后的列顺序,避免中途修改矩阵导致总和计算失效
- 最后用
System.arraycopy把新矩阵内容覆盖回原入参,保证方法外部可以拿到排序后的结果
内容的提问来源于stack exchange,提问作者Staaankey
相关产品推荐
相关产品推荐

