【LeetCode-剑指offer】-- 13.二维区域和检索-矩阵不可变

13.二维区域和检索-矩阵不可变

方法:一维前缀和

初始化时对矩阵的每一行计算前缀和,检索时对二维区域中的每一行计算子数组和,然后对每一行的子数组和计算总和。

具体实现方面,创建 m 行 n+1 列的二维数组 sums,其中 m和 n 分别是矩阵 matrix 的行数和列数,sums[i]为 matrix[i] 的前缀和数组。将 sums 的列数设为 n+1 的目的是为了方便计算每一行的子数组和,不需要对 col1=0的情况特殊处理。

java 复制代码
class NumMatrix {
    int[][] sums;
    public NumMatrix(int[][] matrix) {
        int m = matrix.length;
        if(m > 0){
            int n = matrix[0].length;
            sums = new int[m][n+1];
            for(int i = 0;i<m;i++){
                for(int j = 0;j<n;j++){
                    //对二维区域中每一行计算子数组和,对每一行的子数组计算总和
                    sums[i][j+1] = sums[i][j] + matrix[i][j];
                }
            }
        }
    }
    
    public int sumRegion(int row1, int col1, int row2, int col2) {
        int sum = 0;
        for(int i = row1;i<=row2;i++){
            sum += sums[i][col2+1] - sums[i][col1];
        }
        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);
 */
相关推荐
小沈同学呀几秒前
基于时间片划分的提醒算法设计与实现
服务器·数据库·算法
千金裘换酒1 分钟前
LeetCode 两数之和 Java
java·算法·leetcode
汽车仪器仪表相关领域9 分钟前
光轴精准校准,安全检测基石——JZD-1/2前照灯检测仪用校准灯项目实战分享
数据库·算法·安全·汽车·压力测试·可用性测试
Mintopia11 分钟前
🌍 AI 自主决策:从文字到图像与声音的三元赋能之路
人工智能·算法·aigc
半夏知半秋23 分钟前
rust学习-探讨为什么需要标注生命周期
开发语言·笔记·学习·算法·rust
漫随流水31 分钟前
leetcode算法(二叉树的层序遍历Ⅱ)
数据结构·算法·leetcode·二叉树
源代码•宸36 分钟前
Leetcode—166. 加一【简单】new(big.Int)法
经验分享·算法·leetcode·职场和发展·golang·new.bigint
性感博主在线瞎搞39 分钟前
【算法】KMP算法的next数组的数学原理以及推导过程
数据结构·算法·kmp算法
老鼠只爱大米39 分钟前
LeetCode算法题详解 128:最长连续序列
算法·leetcode·面试题·并查集·哈希集合·最长连续序列