在 Java 中使用 ArrayList 与 Collections.swap 和空间复杂度 O(1) 转置方阵

问题描述 投票:0回答:1

这里给定一个 2D 方阵,我尝试打印空间复杂度 SC:O(1) 的矩阵转置。

for(int row = 0; row < originalArray.size(); row++) {
    for(int col = row+1; col < originalArray.get(0).size(); col++) {
        Collections.swap(originalArray,originalArray.get(row).get(col),originalArray.get(col).get(row));
    }
}

使用 temp 变量,代码可以正常工作,但是使用 collections.swap 会抛出异常。为什么 Collections API 在这里失败?

java multidimensional-array arraylist collections transpose
1个回答
0
投票

使用二维数组和

Collection.swap()
是不可能做到的。因为它需要
List<?>
作为参数。因此它可以接受行列表或单行,但不接受矩阵本身。

但是,您可以将矩阵表示为一维数组,代码将如下所示:

for (int row = 0; row < size; row++) {
    for (int col = row + 1; col < size; col++) {
        Collections.swap(list, row * size + col, col * size + row);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.