java - 交换二维数组的行和列

标签 java algorithm matrix

<分区>

我需要使用 Java 交换二维数组的行和列。我有一个 ArrayList 告诉我特定行和列需要去哪里。例如:

ArrayList<Integer> = [2, 0, 1, 3]
                      0  1  2  3 (indexes for illustration)

上面的意思是第0行第0列需要变成第2行第2列,第1行第1列需要变成第0行第0列,以此类推。

例如:

int[][] example = {
    {0, 3, 3, 4},
    {0, 1, 0, 0},
    {0, 0, 1, 0},
    {8, 1, 1, 0}
};

假设我们先交换行,那么“中间”形式将是:

// From the list, change rows as follows: 
// 0->2, 1->0, 1->2, 3->3
int[][] example = {
    {0, 1, 0, 0},
    {0, 0, 1, 0},
    {0, 3, 3, 4},
    {8, 1, 1, 0}
};

最后,交换列,我们得到了想要的输出:

// From the list, change columns as follows: 
// 0->2, 1->0, 1->2, 3->3
int[][] example = {
    {1, 0, 0, 0},
    {0, 1, 0, 0},
    {3, 3, 0, 4},
    {1, 1, 8, 0}
};

请注意,交换可能在原地或在新矩阵中,这无关紧要。 我被困在需要交换列的部分,我不太确定如何在这里进行。 到目前为止,这是我尝试过的:

public static int[][] makeStandardForm(int[][] m){
    //generate list of index swaps
    List<Integer> l = new ArrayList<Integer>(orderIndexes(m));
    int[][] m1 = new int[m.length][m.length];

    //Swap rows, working fine
    for(int i=0; i < m.length; i++){
        m1[i] = m[(int)l.get(i)];
    }

    //Swap columns, stuck here?
    for(int i=0; i < m.length; i++){
        //don't know how to swap columns
     }
     return m1;
 }

最佳答案

您必须一一复制列值。

试试这个

public static int[][] makeStandardForm(int[][] m){
    //generate list of index swaps
    List<Integer> l = new ArrayList<Integer>(orderIndexes(m));
    int[][] m1 = new int[m.length][m.length];
    int[][] m2 = new int[m.length][m.length];

    //Swap rows, working fine
    for(int i=0; i < m.length; i++){
        m1[i] = m[(int)l.get(i)];
    }

    //Swap columns, stuck here?
    for(int i=0; i < m.length; i++){
        for (int j = 0; j < m.length; j++) { // I used the fact that matrix is square here
            m2[j][i] = m1[j][l.get(i)];
        }
    }
    return m2;
}

关于java - 交换二维数组的行和列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46439026/

相关文章:

java强制编译时评估

arrays - 整数数组中每对的距离与最大值的乘积之和

algorithm - 时间复杂度分析。选择运算符来计算一行代码运行的次数

c++ - 在 C++ 中缩小 2D vector

r - 通过 p 值对相关矩阵进行阈值化

java - 在映射键集流上应用带有 anyMatch() 的谓词,并在谓词为假时返回一些结果

java - 来自单个 pom.xml 的自定义第二个打包 Artifact ,如 jar 和 test-jar?

java - 双冒号的使用——静态和非静态方法引用的区别

根据字母查找相似词的算法

matlab - 如何创建复数对称矩阵?