Bird
Raised Fist0
DSA Goprogramming~5 mins

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

Choose your learning style10 modes available
Time Complexity: Set Matrix Zeroes In Place
O(m * 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.


func setZeroes(matrix [][]int) {
    rows, cols := len(matrix), len(matrix[0])
    rowZero, colZero := false, false

    for i := 0; i < rows; i++ {
        if matrix[i][0] == 0 {
            colZero = true
        }
    }

    for j := 0; j < cols; j++ {
        if matrix[0][j] == 0 {
            rowZero = true
        }
    }

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

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

    if rowZero {
        for j := 0; j < cols; j++ {
            matrix[0][j] = 0
        }
    }

    if colZero {
        for i := 0; i < rows; i++ {
            matrix[i][0] = 0
        }
    }
}
    

This code sets entire rows and columns to zero if any element in them is zero, using the first row and column as markers.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: Nested loops scanning the matrix elements twice.
  • How many times: Each nested loop runs roughly (rows - 1) * (cols - 1) times.
How Execution Grows With Input

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

Input Size (n x n)Approx. Operations
10 x 10About 162 (two passes over 9x9)
100 x 100About 19,602 (two passes over 99x99)
1000 x 1000About 1,996,002 (two passes over 999x999)

Pattern observation: Operations grow roughly with the square of the matrix size.

Final Time Complexity

Time Complexity: O(m * n)

This means the time needed grows proportionally to the total number of elements in the matrix.

Common Mistake

[X] Wrong: "The time complexity is O(m + n) because we only scan rows and columns separately."

[OK] Correct: The nested loops scan almost all elements inside the matrix, so the time depends on the product of rows and columns, not just their sum.

Interview Connect

Understanding this time complexity helps you explain how your solution scales with matrix size, a key skill in coding interviews.

Self-Check

"What if we used extra space to store zero positions instead of marking 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. Modify the matrix so that if an element is 0, its entire row and column become 0
B. Find the sum of all elements in the matrix
C. Sort each row of the matrix in ascending order
D. Transpose the matrix without changing its elements

Solution

  1. Step 1: Understand the problem requirement

    The problem asks to change the matrix so that any row or column containing a zero should be set entirely to zero.
  2. Step 2: Identify the correct operation

    Only Modify the matrix so that if an element is 0, its entire row and column become 0 describes this exact operation, modifying rows and columns based on zero elements.
  3. Final Answer:

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

    Set rows and columns to zero = Modify matrix [OK]
Hint: Remember: zero means zero out whole row and column [OK]
Common Mistakes:
  • Confusing with matrix transpose
  • Trying to sum elements instead of modifying
  • Sorting rows instead of zeroing
2. Which of the following Go code snippets correctly declares a fixed-size 2D array of integers?
easy
A. matrix := [][]int{{1, 2}, {3, 4}}
B. matrix := [2][2]int{{1, 2}, {3, 4}}
C. matrix := [][]int{1, 2, 3, 4}
D. matrix := [2]int{1, 2, 3, 4}

Solution

  1. Step 1: Understand Go 2D array declaration

    In Go, fixed-size 2D arrays use syntax like [rows][cols]type, so [2][2]int is a 2x2 matrix.
  2. Step 2: Check each option

    matrix := [2][2]int{{1, 2}, {3, 4}} correctly declares a 2x2 integer array with values. matrix := [][]int{{1, 2}, {3, 4}} is a slice of slices (dynamic), not a fixed-size array. matrix := [][]int{1, 2, 3, 4} and D are invalid for 2D matrix.
  3. Final Answer:

    matrix := [2][2]int{{1, 2}, {3, 4}} -> Option B
  4. Quick Check:

    Fixed 2D array syntax = [2][2]int [OK]
Hint: Use [rows][cols]type for fixed 2D arrays in Go [OK]
Common Mistakes:
  • Using slice syntax when fixed array needed
  • Incorrect nesting of braces
  • Declaring 1D array instead of 2D
3. What will be the matrix after running the following Go code snippet?
matrix := [][]int{
  {1, 2, 3},
  {4, 0, 6},
  {7, 8, 9},
}
// After applying Set Matrix Zeroes In Place logic
// (zero out rows and columns containing zero)
medium
A. [[1, 0, 3], [0, 0, 0], [0, 0, 0]]
B. [[1, 2, 3], [0, 0, 0], [7, 0, 9]]
C. [[1, 0, 3], [0, 0, 0], [7, 0, 9]]
D. [[0, 0, 0], [0, 0, 0], [0, 0, 0]]

Solution

  1. Step 1: Identify zero positions

    Zero is at matrix[1][1]. So row 1 and column 1 must be zeroed.
  2. Step 2: Apply zeroing

    Row 1 becomes [0,0,0]. Column 1 elements at rows 0 and 2 become 0. So matrix[0][1] and matrix[2][1] are zero.
  3. Final Answer:

    [[1, 0, 3], [0, 0, 0], [7, 0, 9]] -> Option C
  4. Quick Check:

    Zero row and column applied correctly = [[1,0,3],[0,0,0],[7,0,9]] [OK]
Hint: Zero entire row and column for each zero found [OK]
Common Mistakes:
  • Zeroing entire matrix
  • Missing zero in column 1 for rows 0 and 2
  • Zeroing wrong rows or columns
4. Consider this Go function snippet for setting matrix zeroes:
func setZeroes(matrix [][]int) {
  for i := 0; i < len(matrix); i++ {
    for j := 0; j < len(matrix[0]); j++ {
      if matrix[i][j] == 0 {
        for k := 0; k < len(matrix); k++ {
          matrix[k][j] = 0
        }
        for l := 0; l < len(matrix[0]); l++ {
          matrix[i][l] = 0
        }
      }
    }
  }
}
What is the main problem with this code?
medium
A. It only zeros rows but not columns
B. It uses wrong loop ranges for rows and columns
C. It does not check for zero elements at all
D. It modifies the matrix while iterating, causing incorrect zeroing

Solution

  1. Step 1: Analyze matrix modification during iteration

    The code sets zeros immediately when it finds a zero, changing matrix elements during iteration.
  2. Step 2: Understand side effects

    This causes new zeros to appear and triggers more zeroing incorrectly, leading to wrong final matrix.
  3. Final Answer:

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

    In-place modification during scan = incorrect zeroing [OK]
Hint: Mark zeros first, then update matrix to avoid side effects [OK]
Common Mistakes:
  • Changing matrix while scanning
  • Not using extra storage or flags
  • Assuming immediate zeroing is safe
5. You want to set matrix zeroes in place with O(1) extra space. Which approach below correctly achieves this in Go?
hard
A. Use first row and first column as markers to track zero rows and columns, then update matrix accordingly
B. Create a separate boolean matrix to mark zero rows and columns, then update original matrix
C. Copy matrix to a new matrix and update zeros there to avoid modifying original during iteration
D. Use recursion to zero rows and columns when zero found

Solution

  1. Step 1: Understand space constraints

    O(1) extra space means no additional matrix or large data structures allowed.
  2. Step 2: Use first row and column as markers

    Mark zeros in first row and column to remember which rows and columns to zero later, then update matrix in place.
  3. Step 3: Avoid extra space and recursion

    Options A and B use extra space, D uses recursion unnecessarily.
  4. Final Answer:

    Use first row and first column as markers to track zero rows and columns, then update matrix accordingly -> Option A
  5. Quick Check:

    In-place markers = O(1) space zeroing [OK]
Hint: Use matrix edges as flags to save space [OK]
Common Mistakes:
  • Using extra arrays violating space constraint
  • Modifying matrix during iteration without markers
  • Overcomplicating with recursion
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