力扣刷题笔记--304 二维区域和检索 - 矩阵不可变 前缀和
304 二维区域和检索 - 矩阵不可变
作者:AC_OIer
链接:https://leetcode-cn.com/problems/range-sum-query-2d-immutable/solution/xia-ci-ru-he-zai-30-miao-nei-zuo-chu-lai-ptlo/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
思路:
二维前缀和解决的是二维矩阵中的矩形区域求和问题。
二维前缀和数组中的每一个格子记录的是「以当前位置为区域的右下角(区域左上角恒定为原数组的左上角)的区域和」
即 sum 的每个元素表示其区域和。
假设 i 和 j 为固定值 3 来理解。
如何初始化sum中的元素 , (sum 的每个元素表示其区域和);
根据上图可知,就是求 f[i][j] ;
因此当我们要求 (x1, y1) 作为左上角,(x2, y2) 作为右下角 的区域和的时候,可以直接利用前缀和数组快速求解:
至于求子矩阵元素和就是求 matrix[i][j];
class NumMatrix {int[][] sum;public NumMatrix(int[][] matrix) {int n = matrix.length, m = n == 0 ? 0 : matrix[0].length;// 与「一维前缀和」一样,前缀和数组下标从 1 开始,因此设定矩阵形状为 [n + 1][m + 1](模板部分)sum = new int[n + 1][m + 1];// 预处理除前缀和数组(模板部分)for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + matrix[i - 1][j - 1];}}}public int sumRegion(int x1, int y1, int x2, int y2) {// 求某一段区域和 [i, j] 的模板是 sum[x2][y2] - sum[x1 - 1][y2] - sum[x2][y1 - 1] + sum[x1 - 1][y1 - 1];(模板部分)// 但由于我们源数组下标从 0 开始,因此要在模板的基础上进行 + 1x1++; y1++; x2++; y2++;return sum[x2][y2] - sum[x1 - 1][y2] - sum[x2][y1 - 1] + sum[x1 - 1][y1 - 1];}
}
力扣刷题笔记--304 二维区域和检索 - 矩阵不可变 前缀和相关推荐
- [力扣] 304. 二维区域和检索 - 矩阵不可变
[力扣] 304. 二维区域和检索 - 矩阵不可变 给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2). 动态规划 求子 ...
- 【二维前缀和】304. 二维区域和检索 - 矩阵不可变
目录 题目 前缀和解法(二维) 二维vector 定义 这道题是「303. 区域和检索 - 数组不可变」的进阶,第 303 题是在一维数组中做区域和检索,这道题是在二维矩阵中做区域和检索. 题目 30 ...
- 304. 二维区域和检索 - 矩阵不可变
链接:304. 二维区域和检索 - 矩阵不可变 题解:https://leetcode-cn.com/problems/range-sum-query-2d-immutable/solution/er ...
- LeetCode 304. 二维区域和检索 - 矩阵不可变(DP)
1. 题目 2. 解题 类似题目:LeetCode 308. 二维区域和检索 - 可变(前缀和) dp[i][j]数组表示 从左上角到i,j位置的所有和 sum[i+1][j+1]=sum[i+1][ ...
- leetcode 304. Range Sum Query 2D - Immutable |304. 二维区域和检索 - 矩阵不可变(二维前缀和问题)
题目 https://leetcode.com/problems/range-sum-query-2d-immutable/ 题解 本题是 medium 难度,二维前缀和问题.相似题目有: Easy: ...
- leetcode 304. 二维区域和检索 - 矩阵不可变(前缀和)
给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2) . 上图子矩阵左上角 (row1, col1) = (2, 1) , ...
- LeetCode 304. 二维区域和检索 - 矩阵不可变(动态规划)
题目描述 给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2). 上图子矩阵左上角 (row1, col1) = (2, ...
- leetcode304. 二维区域和检索 - 矩阵不可变
给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2). 上图子矩阵左上角 (row1, col1) = (2, 1) ,右 ...
- 【力扣刷题笔记(二)】特别技巧,模块突破,45道经典题目分类总结,在不断巩固中精进
希望大家都能:简单题
最新文章
- 从零开始 Code Review,两年实战经验分享!
- 1900万印度人疯抢6万份工作,加班至死,这才是真正的就业崩溃!
- Learning Cocos2d-x for WP8(9)——Sprite到哪,我做主
- SAP Spartacus OccEndpointsService单元测试的依赖注入
- SAP UI5不支持delta render
- ubuntu-18.04 修改用户名密码
- kafka告警简单方案
- div 重新加载_JS之 加载模糊文本动画
- html页面代码重用-document writeln
- SYBASE性能优化
- Panabit标准版免费版功能限制
- 传奇客户端小地图上的文字描述修改方法
- Java基础每日一练—第6天:逻辑判断
- 华为鸿蒙主题设计,EMUI 11 UX设计一探究竟:这就是鸿蒙OS的提前预演
- 不入世的天才: 尼古拉·特斯拉
- T2-小度养小猫(贪心)
- 【泛微系统】OA系统集成echart插件,自定义图表demo实例
- Office 365组命名策略 - 补充
- CAN通信标准帧和扩展帧(全网最透彻解答)
- SPI的4种采样模式
热门文章
- bulldog-vulnhub
- 帆软:根据参数查看不同报表
- java jbutton 背景颜色_java – 在Windows上设置JButton背景颜色
- 调用百度api实现驾车路线和时间距离计算
- 计算机微机维修工四级理论知识试卷,计算机维修工中级理论知识试卷1.doc
- HBuilder教程
- 由于之前的错误,Context[]启动失败(SSM)
- C语言:统计句子中元音字母的个数
- Docker容器化实战第三课 dockerfile介绍、容器安全与监控讲解
- Leetcode刷题面试题 16.14. 最佳直线