304. Range Sum Query 2D - Immutable

Given a 2D matrix matrix, handle multiple queries of the following type:

Calculate the sum of the elements of matrix inside the rectangle defined by its upper left corner (row1, col1) and lower right corner (row2, col2)


class
NumMatrix:    
    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

Popular posts from this blog

849. Maximize Distance to Closest Person

347. Top K Frequent Elements

139. Word Break