leetcode304. 二维区域和检索 - 矩阵不可变(java)

前缀和数组

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

难度 - 中等
原题链接 - 二维区域和检索 - 矩阵不可变

题目描述

给定一个二维矩阵 matrix,以下类型的多个请求:

计算其子矩形范围内元素的总和,该子矩阵的 左上角 为 (row1, col1) ,右下角 为 (row2, col2) 。

实现 NumMatrix 类:

NumMatrix(int[][] matrix) 给定整数矩阵 matrix 进行初始化

int sumRegion(int row1, int col1, int row2, int col2) 返回 左上角 (row1, col1) 、右下角 (row2, col2) 所描述的子矩阵的元素 总和 。
示例1:

输入:

"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\]

输出:

null, 8, 11, 12

解释:

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 (红色矩形框的元素总和)

numMatrix.sumRegion(1, 1, 2, 2); // return 11 (绿色矩形框的元素总和)

numMatrix.sumRegion(1, 2, 2, 4); // return 12 (蓝色矩形框的元素总和)
提示:

m == matrix.length

n == matrix[i].length

1 <= m, n <= 200

-105 <= matrix[i][j] <= 1e5

0 <= row1 <= row2 < m

0 <= col1 <= col2 < n

最多调用 104 次 sumRegion 方法

前缀和

和一维数组类似.也是先定义一个前缀和数组,求出前缀和的值,然后调用区间值时,就可以用前缀和进行计算.

注意:前缀和数组下标从1开始.

代码演示

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 + 1][n + 1];
            for (int i = 0; i < m; i++) {
                for (int j = 0; j < n; j++) {
                    sums[i + 1][j + 1] = sums[i][j + 1] + sums[i + 1][j] - sums[i][j] + matrix[i][j];
                }
            }
        }
    }
    
    public int sumRegion(int row1, int col1, int row2, int col2) {
        return sums[row2 + 1][col2 + 1] - sums[row1][col2 + 1] - sums[row2 + 1][col1] + sums[row1][col1];
    }

}

一维数组前缀和

leetcode303. 区域和检索 - 数组不可变

相关推荐
听风吹等浪起几秒前
【SwinTransformer 全维度改进方案矩阵】—— 覆盖注意力、多尺度、通道/空间增强,适配CV全场景的工业级优化库
人工智能·深度学习·线性代数·计算机视觉·矩阵
Westward-sun.2 分钟前
矿物分类实战(一):从异常值到标准化——数据清洗全流程拆解
人工智能·算法·机器学习·数据清洗
用户3295125759066 分钟前
Day05-数组和面向对象基础
java
D_C_tyu10 分钟前
HTML | 结合Canvas开发具有智能寻路功能的贪吃蛇小游戏实战详解
javascript·算法·游戏·html·bfs
若鱼191912 分钟前
SpringBoot4+Kafka4 - 生产环境故障 - 消费者执行时间太长导致消息无限循环投递
java·spring·kafka
serve the people12 分钟前
LLaMA-Factory微调数据的清洗与指令构造方法
java·服务器·llama
小王不爱笑13215 分钟前
HashMap 扩容全流程
java·数据结构·算法
历程里程碑15 分钟前
链表--LRU缓存
大数据·数据结构·elasticsearch·链表·搜索引擎·缓存
阿崽meitoufa16 分钟前
抽象类 接口 内部类
java·开发语言
代码探秘者17 分钟前
【算法篇】4.前缀和
java·数据库·后端·python·算法·spring