LeetCode 1314. Matrix Block Sum Solution in Java, C++, Python & More | Explanation + Code

CoderIndeed
0
1314. Matrix Block Sum

Description

Given a m x n matrix mat and an integer k, return a matrix answer where each answer[i][j] is the sum of all elements mat[r][c] for:

  • i - k <= r <= i + k,
  • j - k <= c <= j + k, and
  • (r, c) is a valid position in the matrix.

 

Example 1:

Input: mat = [[1,2,3],[4,5,6],[7,8,9]], k = 1
Output: [[12,21,16],[27,45,33],[24,39,28]]

Example 2:

Input: mat = [[1,2,3],[4,5,6],[7,8,9]], k = 2
Output: [[45,45,45],[45,45,45],[45,45,45]]

 

Constraints:

  • m == mat.length
  • n == mat[i].length
  • 1 <= m, n, k <= 100
  • 1 <= mat[i][j] <= 100

Solutions

Solution 1: Two-Dimensional Prefix Sum

This problem is a template for two-dimensional prefix sum.

We define s[i][j] as the sum of the elements in the first i rows and the first j columns of the matrix mat. The calculation formula for s[i][j] is:

s[i][j] = s[i-1][j] + s[i][j-1] - s[i-1][j-1] + mat[i-1][j-1]

In this way, we can quickly calculate the sum of elements in any rectangular area through the s array.

For a rectangular area with the upper left coordinate (x1, y1) and the lower right coordinate (x2, y2), we can calculate the sum of its elements through the s array:

s[x2+1][y2+1] - s[x1][y2+1] - s[x2+1][y1] + s[x1][y1]

The time complexity is O(m × n), and the space complexity is O(m × n). Where m and n are the number of rows and columns in the matrix, respectively.

PythonJavaC++GoTypeScript
class Solution: def matrixBlockSum(self, mat: List[List[int]], k: int) -> List[List[int]]: m, n = len(mat), len(mat[0]) s = [[0] * (n + 1) for _ in range(m + 1)] for i, row in enumerate(mat, 1): for j, x in enumerate(row, 1): s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + x ans = [[0] * n for _ in range(m)] for i in range(m): for j in range(n): x1, y1 = max(i - k, 0), max(j - k, 0) x2, y2 = min(m - 1, i + k), min(n - 1, j + k) ans[i][j] = ( s[x2 + 1][y2 + 1] - s[x1][y2 + 1] - s[x2 + 1][y1] + s[x1][y1] ) return ans(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 !