我被告知下面的代码是= O(MN)然而,我想出了O(N ^ 2)。这是正确的答案,为什么?
我的思考过程: 嵌套for循环加上if语句 - > (O(N ^ 2)+ O(1))+(O(N ^ 2)+ O(1))= O(N ^ 2)
谢谢
public static void zeroOut(int[][] matrix) {
int[] row = new int[matrix.length];
int[] column = new int[matrix[0].length];
// Store the row and column index with value 0
for (int i = 0; i < matrix.length; i++)
{
for (int j = 0; j < matrix[0].length;j++) {
if (matrix[i][j] == 0)
{
row[i] = 1;
column[j] = 1;
}
}
}
// Set arr[i][j] to 0 if either row i or column j has a 0
for (int i = 0; i < matrix.length; i++)
{
for (int j = 0; j < matrix[0].length; j++)
{
if ((row[i] == 1 || column[j] == 1)){
matrix[i][j] = 0;
}
}
}
}
答案 0 :(得分:9)
M和N指的是什么?我的假设是它分别指“行”和“列”。如果是这样,则等式为O(MN),因为你循环通过M次N次。
如果行和列相等,则O(N ^ 2)将是正确的。