304. Range Sum Query 2D - Immutable
Given a 2D matrix matrix
, handle multiple queries of the following type:
matrix
inside the rectangle defined by its upper left corner (row1, col1)
and lower right corner (row2, col2)
def __init__(self, matrix: List[List[int]]):
self.matrix = matrix
m, n = len(matrix), len(matrix[0])
self.partials = [[0]*n for _ in range(m)]
for r in range(m):
row_prefix = 0
for c in range(n):
row_prefix += matrix[r][c]
self.partials[r][c] = (self.partials[r-1][c] if r > 0 else 0) + row_prefix
print(self.partials)
def sumRegion(self, row1: int, col1: int, row2: int, col2: int) -> int:
full = self.partials[row2][col2]
upper = self.partials[row1-1][col2] if row1 > 0 else 0
left = self.partials[row2][col1-1] if col1 > 0 else 0
upper_left = self.partials[row1-1][col1-1] if row1*col1 > 0 else 0
region_sum = full - upper - left + upper_left
return region_sum
Comments
Post a Comment