Bird
Raised Fist0
DSA Javascriptprogramming~5 mins

Set Matrix Zeroes In Place in DSA Javascript - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Set Matrix Zeroes In Place
O(m x n)
Understanding Time Complexity

We want to understand how the time needed to set matrix zeroes grows as the matrix size increases.

How does the number of steps change when the matrix gets bigger?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


function setZeroes(matrix) {
  const m = matrix.length;
  const n = matrix[0].length;
  let firstColHasZero = false;

  for (let i = 0; i < m; i++) {
    if (matrix[i][0] === 0) firstColHasZero = true;
    for (let j = 1; j < n; j++) {
      if (matrix[i][j] === 0) {
        matrix[i][0] = 0;
        matrix[0][j] = 0;
      }
    }
  }

  for (let i = 1; i < m; i++) {
    for (let j = 1; j < n; j++) {
      if (matrix[i][0] === 0 || matrix[0][j] === 0) {
        matrix[i][j] = 0;
      }
    }
  }

  if (matrix[0][0] === 0) {
    for (let j = 0; j < n; j++) matrix[0][j] = 0;
  }

  if (firstColHasZero) {
    for (let i = 0; i < m; i++) matrix[i][0] = 0;
  }
}
    

This code sets entire rows and columns to zero if any element in them is zero, modifying the matrix in place.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: Nested loops scanning the matrix rows and columns.
  • How many times: Each nested loop runs over all elements, roughly m x n times.
How Execution Grows With Input

As the matrix size grows, the number of operations grows with the total number of elements.

Input Size (m x n)Approx. Operations
10 x 10 = 100About 200 (two passes over all elements)
100 x 100 = 10,000About 20,000
1000 x 1000 = 1,000,000About 2,000,000

Pattern observation: Operations grow roughly proportional to the number of elements in the matrix.

Final Time Complexity

Time Complexity: O(m x n)

This means the time needed grows directly with the total number of elements in the matrix.

Common Mistake

[X] Wrong: "Since there are nested loops, the time complexity must be O((m x n)²)."

[OK] Correct: The nested loops do not multiply the total elements twice; they just scan the matrix a few times, so the total work is proportional to m x n, not squared.

Interview Connect

Understanding how to analyze matrix operations helps you explain your code clearly and shows you can think about efficiency in real problems.

Self-Check

"What if we used extra space to store zero positions instead of modifying in place? How would the time complexity change?"

Practice

(1/5)
1. What is the main goal of the Set Matrix Zeroes In Place problem?
easy
A. Find the sum of all zero elements in the matrix.
B. Modify the matrix so that if an element is 0, its entire row and column become 0 without using extra space.
C. Count how many zeroes are in the matrix.
D. Sort the matrix rows and columns after setting zeroes.

Solution

  1. Step 1: Understand the problem requirement

    The problem asks to set entire rows and columns to zero if any element in them is zero, modifying the matrix directly without extra space.
  2. Step 2: Differentiate from other tasks

    Options B, C, and D describe different tasks like summing, counting, or sorting, which are not the goal here.
  3. Final Answer:

    Modify the matrix so that if an element is 0, its entire row and column become 0 without using extra space. -> Option B
  4. Quick Check:

    Goal = Modify matrix in place [OK]
Hint: Focus on in-place zeroing of rows and columns [OK]
Common Mistakes:
  • Thinking the problem is about counting zeroes
  • Assuming extra space is allowed
  • Confusing with sorting or summing tasks
2. Which of the following JavaScript code snippets correctly initializes a 3x3 matrix filled with zeros?
easy
A. const matrix = [[0,0,0],[0,0],[0,0,0]];
B. const matrix = Array(3).fill(Array(3).fill(0));
C. const matrix = Array.from({ length: 3 }, () => Array(3).fill(0));
D. const matrix = new Array(3).map(new Array(3).fill(0));

Solution

  1. Step 1: Check each initialization method

    const matrix = Array(3).fill(Array(3).fill(0)); uses fill with the same inner array reference, causing all rows to point to the same array, which is incorrect.
  2. Step 2: Identify correct independent row creation

    const matrix = Array.from({ length: 3 }, () => Array(3).fill(0)); uses Array.from with a function to create new arrays for each row, correctly initializing independent rows filled with zeros.
  3. Final Answer:

    const matrix = Array.from({ length: 3 }, () => Array(3).fill(0)); -> Option C
  4. Quick Check:

    Independent rows = const matrix = Array.from({ length: 3 }, () => Array(3).fill(0)); [OK]
Hint: Use Array.from with a function for independent rows [OK]
Common Mistakes:
  • Using fill with array directly causing shared references
  • Incorrect row lengths in nested arrays
  • Using map on uninitialized arrays
3. What will be the matrix after running the following code?
function setZeroes(matrix) {
  const rows = matrix.length;
  const cols = matrix[0].length;
  let firstRowZero = false;
  let firstColZero = false;

  for (let i = 0; i < rows; i++) {
    if (matrix[i][0] === 0) firstColZero = true;
  }
  for (let j = 0; j < cols; j++) {
    if (matrix[0][j] === 0) firstRowZero = true;
  }

  for (let i = 1; i < rows; i++) {
    for (let j = 1; j < cols; j++) {
      if (matrix[i][j] === 0) {
        matrix[i][0] = 0;
        matrix[0][j] = 0;
      }
    }
  }

  for (let i = 1; i < rows; i++) {
    for (let j = 1; j < cols; j++) {
      if (matrix[i][0] === 0 || matrix[0][j] === 0) {
        matrix[i][j] = 0;
      }
    }
  }

  if (firstColZero) {
    for (let i = 0; i < rows; i++) matrix[i][0] = 0;
  }
  if (firstRowZero) {
    for (let j = 0; j < cols; j++) matrix[0][j] = 0;
  }
}

let mat = [
  [1,1,1],
  [1,0,1],
  [1,1,1]
];
setZeroes(mat);
console.log(mat);
medium
A. [[1,0,1],[1,0,1],[1,0,1]]
B. [[0,0,0],[0,0,0],[0,0,0]]
C. [[1,1,1],[1,0,1],[1,1,1]]
D. [[1,0,1],[0,0,0],[1,0,1]]

Solution

  1. Step 1: Identify zero positions and mark rows and columns

    The zero is at position (1,1). The first row and column do not have zero initially. The code marks matrix[1][0] and matrix[0][1] as zero.
  2. Step 2: Set zeroes based on marks and update first row/column if needed

    Using marks, the code sets matrix[1][1], matrix[1][2], matrix[0][1], and matrix[2][1] to zero. Since firstRowZero and firstColZero are false, no changes to first row or column.
  3. Final Answer:

    [[1,0,1],[0,0,0],[1,0,1]] -> Option D
  4. Quick Check:

    Zero at (1,1) zeroes row 1 and column 1 [OK]
Hint: Mark first row/col to track zero rows/columns [OK]
Common Mistakes:
  • Not handling first row and column separately
  • Overwriting marks too early
  • Missing zeroing of entire row or column
4. The following code attempts to set matrix zeroes in place but has a bug. What is the bug?
function setZeroes(matrix) {
  const rows = matrix.length;
  const cols = matrix[0].length;
  for (let i = 0; i < rows; i++) {
    for (let j = 0; j < cols; j++) {
      if (matrix[i][j] === 0) {
        for (let k = 0; k < cols; k++) matrix[i][k] = 0;
        for (let k = 0; k < rows; k++) matrix[k][j] = 0;
      }
    }
  }
}
medium
A. It modifies the matrix while iterating, causing incorrect zeroing.
B. It uses extra space which is not allowed.
C. It does not check for zero elements correctly.
D. It only sets zeroes in the first row and column.

Solution

  1. Step 1: Analyze the nested loops and zero setting

    The code sets zeroes immediately when it finds a zero, modifying the matrix during iteration.
  2. Step 2: Understand the effect of modifying during iteration

    Modifying the matrix while scanning causes new zeroes to appear, leading to extra rows and columns being zeroed incorrectly.
  3. Final Answer:

    It modifies the matrix while iterating, causing incorrect zeroing. -> Option A
  4. Quick Check:

    In-place modification during iteration causes errors [OK]
Hint: Avoid changing matrix while scanning for zeroes [OK]
Common Mistakes:
  • Setting zeroes immediately instead of marking first
  • Not separating scanning and updating phases
  • Assuming immediate zeroing is safe
5. Given a 4x4 matrix:
[
  [0,1,2,0],
  [3,4,5,2],
  [1,3,1,5],
  [1,0,1,7]
]

After applying the in-place zeroing algorithm, what is the final matrix?
hard
A. [[0,0,0,0],[0,0,5,0],[0,0,1,0],[0,0,0,0]]
B. [[0,0,0,0],[3,4,5,2],[1,3,1,5],[1,0,1,7]]
C. [[0,1,2,0],[3,4,5,2],[1,3,1,5],[1,0,1,7]]
D. [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]

Solution

  1. Step 1: Identify zero positions in the matrix

    Zeroes are at positions (0,0), (0,3), and (3,1). These mark rows 0 and 3, and columns 0, 1, and 3 for zeroing.
  2. Step 2: Set entire rows and columns to zero based on marks

    Rows 0 and 3 become all zero. Columns 0, 1, and 3 become zero in all rows. The resulting matrix is [[0,0,0,0],[0,0,5,0],[0,0,1,0],[0,0,0,0]].
  3. Final Answer:

    [[0,0,0,0],[0,0,5,0],[0,0,1,0],[0,0,0,0]] -> Option A
  4. Quick Check:

    Zero rows and columns set correctly [OK]
Hint: Mark zero rows and columns, then update matrix once [OK]
Common Mistakes:
  • Missing zeroing some columns or rows
  • Overwriting matrix too early
  • Not handling multiple zeroes correctly
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard