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. 区域和检索 - 数组不可变

相关推荐
胜玲龙1 分钟前
单点登录是是什么?具体流程是什么?
java·服务器·前端
快乐肚皮17 分钟前
基于Spring Cloud Sentinel自研Slot扩展实战
java·spring cloud·sentinel
zc.z22 分钟前
sentinel核心原理-高频问题
java·开发语言
夏季疯37 分钟前
学习笔记:黑马程序员JavaWeb开发教程(2025.4.6)
java·笔记·学习
理论最高的吻39 分钟前
HJ10 字符个数统计【牛客网】
c++·算法·散列表
HappyAcmen40 分钟前
线代第三章向量第二节:向量间的线性关系一
笔记·学习·线性代数
仙人掌_lz43 分钟前
深入理解蒙特卡洛树搜索(MCTS):python从零实现
人工智能·python·算法·ai·强化学习·rl·mcts
chxii1 小时前
8.1UDP点对点聊天小项目
java·网络·udp
犬余1 小时前
告别Spring AI!我的Java轻量AI框架实践(支持多模型接入|注解式MCP架构|附开源地址)
java·人工智能·spring
平和男人杨争争1 小时前
山东大学计算机图形学期末复习11——CG13上
算法·图形渲染