LeetCode304. 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).

Implement the NumMatrix class:

NumMatrix(int[][] matrix) Initializes the object with the integer matrix matrix.

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

You must design an algorithm where sumRegion works on O(1) time complexity.

Example 1:

Input

"NumMatrix", "sumRegion", "sumRegion", "sumRegion"

\[\[\[3, 0, 1, 4, 2\], \[5, 6, 3, 2, 1\], \[1, 2, 0, 1, 5\], \[4, 1, 0, 1, 7\], \[1, 0, 3, 0, 5\]\]\], \[2, 1, 4, 3\], \[1, 1, 2, 2\], \[1, 2, 2, 4\]

Output

null, 8, 11, 12

Explanation

NumMatrix numMatrix = new NumMatrix([[3, 0, 1, 4, 2], [5, 6, 3, 2, 1], [1, 2, 0, 1, 5], [4, 1, 0, 1, 7], [1, 0, 3, 0, 5]]);

numMatrix.sumRegion(2, 1, 4, 3); // return 8 (i.e sum of the red rectangle)

numMatrix.sumRegion(1, 1, 2, 2); // return 11 (i.e sum of the green rectangle)

numMatrix.sumRegion(1, 2, 2, 4); // return 12 (i.e sum of the blue rectangle)

Constraints:

m == matrix.length

n == matrix[i].length

1 <= m, n <= 200

-104 <= matrix[i][j] <= 104

0 <= row1 <= row2 < m

0 <= col1 <= col2 < n

At most 104 calls will be made to sumRegion.

二、题解

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

/**
 * Your NumMatrix object will be instantiated and called as such:
 * NumMatrix* obj = new NumMatrix(matrix);
 * int param_1 = obj->sumRegion(row1,col1,row2,col2);
 */
相关推荐
雪度娃娃4 分钟前
C++异步日志系统
开发语言·c++
博界IT精灵6 分钟前
图的遍历(哈喜老师)
数据结构·考研·算法·深度优先
sheeta199814 分钟前
LeetCode 每日一题笔记 日期:2026.05.10 题目:2770. 达到末尾下标所需的最大跳跃次数
笔记·算法·leetcode
kyle~15 分钟前
ROS2---路径机制辨析
c++·机器人·ros2
Halo_tjn19 分钟前
基于异常处理机制 相关知识点
java·开发语言·算法
xingyuzhisuan33 分钟前
适合微调Llama 3 70B模型的最低GPU配置推荐
运维·人工智能·算法·llama·gpu算力
IJCAST1 小时前
Exploring the Frontiers of Complexity: Latest Research from IJCAST
人工智能·深度学习·神经网络·算法
所以遗憾是什么呢?1 小时前
【题解】Codeforces Round 1097 (Div. 2, Based on Zhili Cup 2026) (致理杯) ABCDEF
数据结构·算法·acm·codeforces·icpc·ccpc·xcpc
wuweijianlove1 小时前
算法优化中的控制流重构与分支预测机制的技术7
算法·重构
Yuezero_1 小时前
Latent Manifold理论分析
人工智能·算法·机器学习