-2

我有一个具有r行和c列的矩阵。我已将矩阵存储在二维数组中。见下图。

在此处输入图像描述

我在每一行中找到最小数量。如果最小数量位于第一列,我将最小值添加到 listC1。

考虑上图。

在第一行 R1 最小数字是2,它位于 C1 列中,我想将 2 添加到listC1. 在第二行 R2 最小数字是4,它位于 C3 列我想添加 4 listC3。在第三行 R3 最小数字是5,它位于 C2 列中,我想将 5 添加到listC2. 简而言之,如果最小数字在第一列,我将在第一列添加最小数字listC1,如果最小数字在第二列,我将在第二列添加最小数字listC2,如果最小数字在第三列,我将添加第三个列表中的最小数量listC3等等。

现在我面临的问题是如何创建一个列表列表来实现上述逻辑。我已经开发了一些代码(见下文),但它不能正常工作。请在这方面帮助我

Note:  Ther number of columns may vary from 3 to 30



final float[][] matrix = {
            {2f, 8f, 5f},
            {9f, 7f, 4f},
            {8f, 5f, 6f},
            {7f, 3f, 9f},
            {1f, 5f, 5f},
            {8f, 7f, 5f},
        };

        Map<Integer, ArrayList<Float>> minsMap = new LinkedHashMap<>();



        for(int row=0; row < matrix.length; row++)
        {
            float min = Float.MAX_VALUE;
            int mc = 0;

            for(int col=0; col < matrix[row].length; col++)
            {
                if(matrix[row][col] < min) 
                {
                    min = matrix[row][col];
                    mc = col;
                }

                ArrayList<Float> minList = minsMap.get(mc);

                if(minList == null) 
                {
                    minList = new ArrayList<>();
                    minsMap.put(mc, minList);
                }
                minList.add(min);
            }

        }

        for(java.util.Map.Entry<Integer, ArrayList<Float>> e : minsMap.entrySet()) 
        {
            System.out.println("Min values in column " + e.getKey() + ": " + e.getValue());
        }
4

1 回答 1

0

nestedGroup仅当 an 用于所有列时才被初始化。这是不正确的,每列都需要一个嵌套组。

看看这段代码,它使用 aMap来保存最小值列表。

private final static float[][] matrix = {
    {2f, 8f, 5f},
    {9f, 7f, 4f},
    {8f, 5f, 6f},
    {7f, 3f, 9f},
    {1f, 5f, 5f},
    {8f, 7f, 5f},
};


@Test
public void minOfMatrixColumn() {
    Map<Integer, List<Float>> minsMap = new LinkedHashMap<>();
    for(int r = 0; r < matrix.length; r++) {
        float min = Float.MAX_VALUE;
        int mc = 0;
        for(int c = 0; c < matrix[r].length; c++) {
            if(matrix[r][c] < min) {
                min = matrix[r][c];
                mc = c;
            }
        }
        List<Float> minList = minsMap.get(mc);
        if(minList == null) {
            minList = new ArrayList<>();
            minsMap.put(mc, minList);
        }
        minList.add(min);
    }
    for(Entry<Integer, List<Float>> e : minsMap.entrySet()) {
        System.out.println("Min values in column " + e.getKey() + ": " + e.getValue());
    }
}

输出

Min values in column 0: [2.0, 1.0]
Min values in column 2: [4.0, 5.0]
Min values in column 1: [5.0, 3.0]

请注意,列表不是按列索引排序的。

于 2013-05-15T07:35:19.540 回答