文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给你一个 2D 矩阵 matrix,请计算出从左上角 (row1, col1) 到右下角 (row2, col2) 组成的矩形中所有元素的和。

上述粉色矩形框内的,该矩形由左上角 (row1, col1) = (2, 1) 和右下角 (row2, col2) = (4, 3) 确定。其中,所包括的元素总和 sum = 8。

示例:
给定 matrix = [[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]
]
sumRegion(2, 1, 4, 3) -> 8
update(3, 2, 2)
sumRegion(2, 1, 4, 3) -> 10注意:
矩阵 matrix 的值只能通过 update 函数来进行修改
你可以默认 update 函数和 sumRegion 函数的调用次数是均匀分布的
你可以默认 row1 ≤ row2,col1 ≤ col2

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/range-sum-query-2d-mutable
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 类似题目:LeetCode 304. 二维区域和检索 - 矩阵不可变(DP)
  • 二维树状数组可以更高效,树状数组默写不来
  • 用行的前缀和做,时间复杂度O(n)
class NumMatrix {vector<vector<int>> mat;vector<vector<int>> rowpresum;
public:NumMatrix(vector<vector<int>>& matrix) {mat = matrix;rowpresum = matrix;for(int i = 0, j; i < matrix.size(); ++i){for(j = 1; j < matrix[0].size(); ++j)rowpresum[i][j] = rowpresum[i][j-1] + matrix[i][j];}}void update(int row, int col, int val) {mat[row][col] = val;rowpresum[row][col] = (col > 0 ? rowpresum[row][col-1] : 0) + val;for(int j = col+1; j < mat[0].size(); ++j)rowpresum[row][j] = rowpresum[row][j-1] + mat[row][j];}int sumRegion(int row1, int col1, int row2, int col2) {int sum = 0;for(int i = row1; i <= row2; ++i){sum += rowpresum[i][col2] - (col1==0 ? 0 : rowpresum[i][col1-1]);}return sum;}
};

28 ms 12.2 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 308. 二维区域和检索 - 可变(前缀和)相关推荐

  1. LeetCode 304. 二维区域和检索 - 矩阵不可变(DP)

    1. 题目 2. 解题 类似题目:LeetCode 308. 二维区域和检索 - 可变(前缀和) dp[i][j]数组表示 从左上角到i,j位置的所有和 sum[i+1][j+1]=sum[i+1][ ...

  2. leetcode 304. 二维区域和检索 - 矩阵不可变(前缀和)

    给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2) . 上图子矩阵左上角 (row1, col1) = (2, 1) , ...

  3. LeetCode 304. 二维区域和检索 - 矩阵不可变(动态规划)

    题目描述 给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2). 上图子矩阵左上角 (row1, col1) = (2, ...

  4. 力扣刷题笔记--304 二维区域和检索 - 矩阵不可变 前缀和

    304 二维区域和检索 - 矩阵不可变 作者:AC_OIer 链接:https://leetcode-cn.com/problems/range-sum-query-2d-immutable/solu ...

  5. [力扣] 304. 二维区域和检索 - 矩阵不可变

    [力扣] 304. 二维区域和检索 - 矩阵不可变 给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2). 动态规划 求子 ...

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

    链接:304. 二维区域和检索 - 矩阵不可变 题解:https://leetcode-cn.com/problems/range-sum-query-2d-immutable/solution/er ...

  7. 【二维前缀和】304. 二维区域和检索 - 矩阵不可变

    目录 题目 前缀和解法(二维) 二维vector 定义 这道题是「303. 区域和检索 - 数组不可变」的进阶,第 303 题是在一维数组中做区域和检索,这道题是在二维矩阵中做区域和检索. 题目 30 ...

  8. leetcode 304. Range Sum Query 2D - Immutable |304. 二维区域和检索 - 矩阵不可变(二维前缀和问题)

    题目 https://leetcode.com/problems/range-sum-query-2d-immutable/ 题解 本题是 medium 难度,二维前缀和问题.相似题目有: Easy: ...

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

    给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2). 上图子矩阵左上角 (row1, col1) = (2, 1) ,右 ...

最新文章

  1. Android 单元测试
  2. 爱立信思科结盟背后:几家欢喜几家愁
  3. pyspark读取hdfs 二进制文件
  4. linux存储--共享内存机制shm(十四)
  5. 为什么要实施服务器虚拟化
  6. 阿里云人脸识别sdk
  7. 不同于NLP,数据驱动、机器学习无法攻克NLU,原因有三
  8. 数据结构与算法之排序(归纳总结三)
  9. java8+tomcate8仅支持TLSv1.2
  10. python输入月份判断季节_用户输入月份,判断这个月是哪个季节。(要求使用列表)_学小易找答案...
  11. php怎么打印json数据,php输出json格式数据的例子
  12. php pdo mysql类源码_完整示例php+pdo实现的购物车类
  13. matlab的special函数用法
  14. 《网络工程师教程(第五版)》大纲及与第四版比较
  15. 高校学生竞赛信息管理系统介绍
  16. 武汉大学计算机学院 田海院长,玄跻峰 - 教师简历 CV- 武汉大学计算机学院
  17. origin画已知函数曲线_20+实用origin技能,带你用技巧画出完美曲线!
  18. 关于手机传感器,你需要了解的一些(一)
  19. web网页设计实例作业 ——中国茶文化(6页) 茶文化网页制作作业_中国化(网页设计...
  20. 新型的Hbb项目目录结构

热门文章

  1. 【Kubernetes】k8s 的基本使用指令
  2. Linux中python2和python3的pip设置 及清华安装源
  3. scrapyd部署_如何通过 Scrapyd + ScrapydWeb 简单高效地部署和监控分布式爬虫项目
  4. MySQL InnoDB 是如何存储数据的
  5. Socket的3次握手链接与4次断开握手
  6. 线程安全和可重入函数的联系与区别
  7. 360网络修复工具_为什么大家都在骂360,但是360依旧是很强?
  8. 《C++标准程序库》学习笔记5 — 第七章
  9. 前端小插件之手写js循环滚动特效
  10. 常见排序算法的C#实现