LeetCode 1252. Cells with Odd Values in a Matrix Solution in Java, C++, Python & Go | Explanation + Code

CoderIndeed
0
1252. Cells with Odd Values in a Matrix

Description

There is an m x n matrix that is initialized to all 0's. There is also a 2D array indices where each indices[i] = [ri, ci] represents a 0-indexed location to perform some increment operations on the matrix.

For each location indices[i], do both of the following:

  1. Increment all the cells on row ri.
  2. Increment all the cells on column ci.

Given m, n, and indices, return the number of odd-valued cells in the matrix after applying the increment to all locations in indices.

 

Example 1:

Input: m = 2, n = 3, indices = [[0,1],[1,1]]
Output: 6
Explanation: Initial matrix = [[0,0,0],[0,0,0]].
After applying first increment it becomes [[1,2,1],[0,1,0]].
The final matrix is [[1,3,1],[1,3,1]], which contains 6 odd numbers.

Example 2:

Input: m = 2, n = 2, indices = [[1,1],[0,0]]
Output: 0
Explanation: Final matrix = [[2,2],[2,2]]. There are no odd numbers in the final matrix.

 

Constraints:

  • 1 <= m, n <= 50
  • 1 <= indices.length <= 100
  • 0 <= ri < m
  • 0 <= ci < n

 

Follow up: Could you solve this in O(n + m + indices.length) time with only O(n + m) extra space?

Solutions

Solution 1: Simulation

We create a matrix g to store the result of operations. For each pair (ri, ci) in indices, we add 1 to all numbers in the ri-th row of the matrix and add 1 to all elements in the ci-th column.

After the simulation ends, we traverse the matrix and count the number of odd numbers.

The time complexity is O(k × (m + n) + m × n), and the space complexity is O(m × n). Here, k is the length of indices.

PythonJavaC++Go
class Solution: def oddCells(self, m: int, n: int, indices: List[List[int]]) -> int: g = [[0] * n for _ in range(m)] for r, c in indices: for i in range(m): g[i][c] += 1 for j in range(n): g[r][j] += 1 return sum(v % 2 for row in g for v in row)(code-box)

Solution 2: Space Optimization

We can use a row array row and a column array col to record the number of times each row and column is incremented. For each pair (ri, ci) in indices, we add 1 to row[ri] and col[ci] respectively.

After the operations are completed, the count at position (i, j) can be calculated as row[i] + col[j]. We traverse the matrix and count the number of odd numbers.

The time complexity is O(k + m × n), and the space complexity is O(m + n). Here, k is the length of indices.

PythonJavaC++Go
class Solution: def oddCells(self, m: int, n: int, indices: List[List[int]]) -> int: row = [0] * m col = [0] * n for r, c in indices: row[r] += 1 col[c] += 1 return sum((i + j) % 2 for i in row for j in col)(code-box)

Solution 3: Mathematical Optimization

We notice that a number at position (i, j) in the matrix will be odd only when exactly one of row[i] and col[j] is odd and the other is even.

We count the number of odd numbers in row, denoted as cnt1, and the number of odd numbers in col, denoted as cnt2. Therefore, the final count of odd numbers is cnt1 × (n - cnt2) + cnt2 × (m - cnt1).

The time complexity is O(k + m + n), and the space complexity is O(m + n). Here, k is the length of indices.

PythonJavaC++Go
class Solution: def oddCells(self, m: int, n: int, indices: List[List[int]]) -> int: row = [0] * m col = [0] * n for r, c in indices: row[r] += 1 col[c] += 1 cnt1 = sum(v % 2 for v in row) cnt2 = sum(v % 2 for v in col) return cnt1 * (n - cnt2) + cnt2 * (m - cnt1)(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !