力扣304(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) 所描述的子矩阵的元素 总和

输入:
["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] <= 105
0 <= row1 <= row2 < m
0 <= col1 <= col2 < n
最多调用 104 次 sumRegion 方法
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/range-sum-query-2d-immutable
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
1.先求presum[i][j]:从[0][0]到[i][j]位置的子矩阵所有元素之和;
2.再利用presum求子矩阵的面积。

代码:
注意: presum 矩阵要比原矩阵多一行一列,是为了让第 0 行与第 0 列的元素也能使用上面的递推公式。如果 preSum 矩阵大小和 martix 大小相等,则需要对第 0 行与第 0 列特殊判断。所以求前缀和时从 1 开始,类似于一维前缀和,也是在比原数组多一个元素,主要是为了 presum[0] 时也能直接表示,不然需要特殊判断。
1 class NumMatrix {
2 int[][] presum;
3
4 public NumMatrix(int[][] matrix) {
5 presum = new int[matrix.length + 1][matrix[0].length + 1];
6 for(int i = 0; i < matrix.length; i++){
7 for(int j = 0; j < matrix[0].length; j++){
8 presum[i + 1][j + 1] = presum[i + 1][j] + presum[i][j + 1] - presum[i][j] + matrix[i][j];
9 }
10 }
11 }
12 public int sumRegion(int row1, int col1, int row2, int col2) {
13 return presum[row2 + 1][col2 + 1] - presum[row2 + 1][col1] -presum[row1][col2 + 1] + presum[row1][col1];
14 }
15 }
16
17 /**
18 * Your NumMatrix object will be instantiated and called as such:
19 * NumMatrix obj = new NumMatrix(matrix);
20 * int param_1 = obj.sumRegion(row1,col1,row2,col2);
21 */

力扣304(java)-二维区域和检索-矩阵不可变(中等)的更多相关文章
- Java实现 LeetCode 304 二维区域和检索 - 矩阵不可变
304. 二维区域和检索 - 矩阵不可变 给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2). Range Sum Qu ...
- Leetcode 304.二维区域和检索-矩阵不可变
二维区域和检索 - 矩阵不可变 给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2). 上图子矩阵左上角 (row1, c ...
- LeetCode 304. Range Sum Query 2D - Immutable 二维区域和检索 - 矩阵不可变(C++/Java)
题目: Given a 2D matrix matrix, find the sum of the elements inside the rectangle defined by its upper ...
- [Swift]LeetCode304. 二维区域和检索 - 矩阵不可变 | Range Sum Query 2D - Immutable
Given a 2D matrix matrix, find the sum of the elements inside the rectangle defined by its upper lef ...
- [Leetcode]303.区域和检索&&304.二维区域和检索
题目 1.区域和检索: 简单题,前缀和方法 乍一看就觉得应该用前缀和来做,一个数组多次查询. 实现方法: 新建一个private数组prefix_sum[i],用来存储nums前i个数组的和, 需要找 ...
- [LeetCode] Range Sum Query 2D - Mutable 二维区域和检索 - 可变
Given a 2D matrix matrix, find the sum of the elements inside the rectangle defined by its upper lef ...
- [LeetCode] Range Sum Query 2D - Immutable 二维区域和检索 - 不可变
Given a 2D matrix matrix, find the sum of the elements inside the rectangle defined by its upper lef ...
- [LeetCode] 304. Range Sum Query 2D - Immutable 二维区域和检索 - 不可变
Given a 2D matrix matrix, find the sum of the elements inside the rectangle defined by its upper lef ...
- 领扣(LeetCode)二维区域和检索 个人题解
给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2). 上图子矩阵左上角 (row1, col1) = (2, 1) ,右 ...
- 304 Range Sum Query 2D - Immutable 二维区域和检索 - 不可变
给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2). 上图子矩阵左上角 (row1, col1) = (2, 1) ,右 ...
随机推荐
- python 音频通道分离的源码实现
一 前记 作为一个音频工程师,仅仅依靠鼠标点击,没有一些自己的小工具的话,肯定是不合格的了. 最近用到了一个音频通道分离的功能,这里就用python敲击了一下,这里做个备忘吧,给有需求的小伙伴抛砖引玉 ...
- 关于linux系统版本的一个分类展现
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文发布于 2014-07-06 22:58:35 ...
- YAML语法入门
Ansible是一个系列文章,我会尽量以通俗易懂.诙谐幽默的总结方式给大家呈现这些枯燥的知识点,让学习变的有趣一些. Ansible系列博文直达链接:Ansible入门系列 前言 在学习playboo ...
- 【虚拟仿真】3DCAT虚拟仿真在化工安全方面的应用
随着中国经济的快速发展,石油化工企业的生产事故也在频繁发生.国家目前对生产安全的重视程度提高到前所未有的高度.企业也在安全管理上做了许多工作,如:进行安全培训,制定安全手册等.但这些方式的效果不明显, ...
- 记录--手把手教你Vue+ECharts+高德地图API实现天气预报数据可视化
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 所谓数据可视化,我们可以理解为从宏观角度来看一眼就能看出来整个数据的占比,走向.对于数据可视化,很多互联网公司是很看重这一块的,包括 ...
- WPF 图片锯齿解决办法(保证解决!!!)
无非几个属性统统加上,不能解决我倒立洗头,日五档电风扇 RenderOptions.BitmapScalingMode="HighQuality" UseLayoutRoundin ...
- List和ObservableCollection的转换
1.我们后台查询全部List数据的时候,前台需要ObservableCollection展示 这个时候List需要转换成ObservableCollection public static Obser ...
- 实现一个简单的echarts词云图PythonFlask
cloud.html 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta char ...
- HTTP报文结构
HTTP报文结构 HTTP报文头 HTTP相应报文 请求方法 状态码
- mybatis踩坑之integer类型是0的时候会被认为0!=''是假
当你的参数类型是integer类型,并且传的是0的时候,在SQL里面做if判断的时候 <if test="auditStatus != null and auditStatus != ...