You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按每列负奇数的和对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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 05:18:01