Java 难以理解两个嵌套for循环如何仍然具有O(n)运行时

Java 难以理解两个嵌套for循环如何仍然具有O(n)运行时,java,algorithm,matrix,big-o,space-complexity,Java,Algorithm,Matrix,Big O,Space Complexity,我有下面一段解决方案代码来向右旋转图像 它首先转置矩阵,然后在垂直轴上翻转: public static void rotateSquareImageCW(int[][] matrix) { transposeMatrix(matrix); flipVerticalAxis(matrix); } public static void transposeMatrix(int[][] matrix) { int n = matrix.length - 1;

我有下面一段解决方案代码来向右旋转图像

它首先转置矩阵,然后在垂直轴上翻转:

public static void rotateSquareImageCW(int[][] matrix) {
    transposeMatrix(matrix);
    flipVerticalAxis(matrix);
}   


public static void transposeMatrix(int[][] matrix) {
    int n = matrix.length - 1;
    int temp = 0;
    for(int i = 0; i <= n; i++){
        for(int j = i+1; j <= n; j++){
            temp = matrix[i][j];
            matrix[i][j] = matrix[j][i];
            matrix[j][i] = temp;
        }
    }
}


private static void flipVerticalAxis(int[][] matrix) {
    int n = matrix.length - 1;
    int temp = 0;
    for(int i = 0; i <= n; i++){
        for(int j = 0; j <= n/2; j++){
            temp = matrix[i][j];
            matrix[i][j] = matrix[i][n-j];
            matrix[i][n-j] = temp;
        }
    }
}
publicstaticvoidrotatesquareimagecw(int[][]矩阵){
转置矩阵(矩阵);
垂直轴(矩阵);
}   
公共静态void transpossematrix(int[][]矩阵){
int n=矩阵长度-1;
内部温度=0;

对于(int i=0;i,正如注释中已经指出的,它取决于
O(n)
表达式中
n
的定义

最合理的定义是
n
表示矩阵的宽度或高度。这与各种矩阵算法分析一致,并且代码使用了一个名为
n
的变量,该变量的含义正好相同

代码仅使用一组固定的附加存储元素,即
i
j
n
temp
,因此它是恒定空间(不计算预先存在的
矩阵
),意味着
O(1)
空间复杂性

这两个嵌套循环分别迭代
n
(或
n/2
)元素,因此您完全正确,这意味着
O(n²)


所以,它是空间和时间复杂度。

那么,这里O(n)中的“n”是什么?如果n是矩阵中的元素数,那么它就有O(n)时间复杂度。如果n是矩阵的宽度(=高度),那么它就是O(n^2)。如果n总是相同的数(一个常数)那么作者是对的,它是O(1)时间,但他是错的,它是O(n)空间。对于变量n,这段代码在O(n^2)时间内运行,n定义为矩阵中的行数