Range Sum Query 2D - Immutable

ㅋㅋ·2022년 6월 3일
0

알고리즘-leetcode

목록 보기
5/135

정수 행렬과 사각형의 좌상단, 우하단 두 점이 주어 진다.

행렬 내에서 사각형 영역의 합을 구하는 문제

class NumMatrix {
public:
    vector<vector<int>> prefixMatrix{};
    
    NumMatrix(vector<vector<int>>& matrix) {
        
        int n = matrix.size();
        int m = matrix[0].size();
        
        prefixMatrix.resize(n + 1, vector<int>(m + 1));
        
        for (int i = 0; i < n ; i++)
        {
            for (int j = 0; j < m; j++)
            {
                prefixMatrix[i + 1][j + 1] = matrix[i][j]
                                            + prefixMatrix[i][j + 1] 
                                	        + prefixMatrix[i + 1][j]
                                            - prefixMatrix[i][j];
            }
        }
        
    }
    
    int sumRegion(int row1, int col1, int row2, int col2) {
        
        int sum = prefixMatrix[row2 + 1][col2 + 1]
        		  + prefixMatrix[row1][col1]
                  - prefixMatrix[row2 + 1][col1]
                  - prefixMatrix[row1][col2 + 1];
        
        return sum;
    }
};

/**
 * Your NumMatrix object will be instantiated and called as such:
 * NumMatrix* obj = new NumMatrix(matrix);
 * int param_1 = obj->sumRegion(row1,col1,row2,col2);
 */

0개의 댓글