https://leetcode.com/problems/range-sum-query-2d-immutable

class NumMatrix {
public:
    NumMatrix(vector<vector<int>> matrix) {
        if (matrix.size() == 0 || matrix[0].size() == 0)
            return;
        sumArray = matrix;
        for (int i = 0; i < matrix.size(); i++) {
            int sum = 0;
            for (int j = 0; j < matrix[0].size(); j++) {
                sum += matrix[i][j];
                sumArray[i][j] = sum;
            }
        }
        for (int j = 0; j < matrix[0].size(); j++) {
            int sum = 0;
            for (int i = 0; i < matrix.size(); i++) {
                sum += sumArray[i][j];
                sumArray[i][j] = sum;
            }
        }
    }
    
    int sumRegion(int row1, int col1, int row2, int col2) {
        if (sumArray.size() == 0 || sumArray[0].size() == 0)
            return 0;
        int r1 = 0;
        int r2 = 0;
        int r3 = 0;
        if (row1 > 0) {
            r1 = sumArray[row1 -1][col2];
        }
        if (col1 > 0) {
            r2 = sumArray[row2][col1 - 1];
        }
        if (row1 > 0 && col1 > 0) {
            r3 = sumArray[row1 -1][col1 - 1];
        }
        int sub = r1 + r2 - r3;
        return sumArray[row2][col2] - sub;
    }
private:
    vector<vector<int>> sumArray;
};

留言

這個網誌中的熱門文章

https://leetcode.com/contest/leetcode-weekly-contest-52/problems/longest-univalue-path/

https://leetcode.com/contest/leetcode-weekly-contest-52/problems/maximum-sum-of-3-non-overlapping-subarrays/