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

上图子矩阵左上角 (row1, col1) = (2, 1) ,右下角(row2, col2) = (4, 3),该子矩形内元素的总和为 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
sumRegion(1, 1, 2, 2) -> 11
sumRegion(1, 2, 2, 4) -> 12

解题思路

维护一个前缀和数组,公式: temp[i][j]=matrix[i][j]+temp[i-1][j]+temp[i][j-1]-temp[i-1][j-1];
根据前缀和计算区域和公式:sum=temp[row2][col2]-temp[row2][col1-1]-temp[row1-1][col2]+temp[row1][col1]

代码

   class NumMatrix {int[][] temp;public NumMatrix(int[][] matrix) {if(matrix.length==0) return;temp=new int[matrix.length][matrix[0].length];temp[0][0]=matrix[0][0];  //计算前缀和数组for (int i = 1; i < matrix.length; i++) {temp[i][0]=temp[i-1][0]+matrix[i][0];}for (int i = 1; i < matrix[0].length; i++) {temp[0][i]=temp[0][i-1]+matrix[0][i];}for (int i = 1; i < matrix.length; i++)for (int j = 1; j < matrix[0].length; j++){//前缀和公式temp[i][j]=matrix[i][j]+temp[i-1][j]+temp[i][j-1]-temp[i-1][j-1];}}public int sumRegion(int row1, int col1, int row2, int col2) {//区域矩阵和=temp[row2][col2]-temp[row2][col1-1]-temp[row1-1][col2]+temp[row1][col1]int leftUpRow=row1-1,leftUpcol=col1-1,sum=temp[row2][col2];if(leftUpcol>=0&&leftUpRow>=0)sum+=temp[leftUpRow][leftUpcol];if(leftUpcol>=0) sum-=temp[row2][leftUpcol];if(leftUpRow>=0) sum-=temp[leftUpRow][col2];return sum;}}/*** Your NumMatrix object will be instantiated and called as such:* NumMatrix obj = new NumMatrix(matrix);* int param_1 = obj.sumRegion(row1,col1,row2,col2);*/

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. leetcode算法题--二维区域和检索 - 矩阵不可变

    原题链接:https://leetcode-cn.com/problems/range-sum-query-2d-immutable/ 1.暴力(超时) class NumMatrix {public ...

最新文章

  1. 2017年计算机四级试题,2017年全国计算机四级考试模拟试题与答案
  2. C++Adaline自适应线性神经网络算法(附完整源码)
  3. C语言二进制转换为十六进制(附完整源码)
  4. 关于大龄程序员的谣言 新手必读
  5. bug?VS2010中CImageList::DrawIndirect总是返回失败
  6. windows.open()参数列表
  7. idea 改变输出语句的颜色 工具类
  8. Excel文件输出到浏览器
  9. UltraWebGrid两种显示样式
  10. 计算机里的音乐怎么设置,realtek高清晰音频管理器怎么设置
  11. 软件人才争夺战日趋白热化
  12. java qq协议 php_Java基于JavaMail实现向QQ邮箱发送邮件
  13. android7.1索尼,Xperia 1
  14. Linux 网络编程socket错误分析
  15. 【Linux】虚拟机VMware的Ubuntu使用vi指令的方向键和backspace空格键乱码
  16. bzoj4453: cys就是要拿英魂!(后缀数组+单调栈+set)
  17. 常用的在线JS解密工具
  18. Sql server找不到启动图标
  19. python之用scapy分层解析pcap报文(Ethernet帧、IP数据包、TCP数据包、UDP数据包、Raw数据包)
  20. 当代人工智能复习2022

热门文章

  1. 树莓派远程监控的实现
  2. 汇编语言的相对跳转和绝对跳转以及反汇编代码解析
  3. PTA -- A1046 Shortest Distance
  4. strlen和sizeof的长度区别
  5. css text-align-last设置末尾文本对齐方式
  6. 如何定制Activity的标题栏
  7. 堆溢出的DWORD Shoot核心原理-口语化
  8. iOS 多参数 ...NS_REQUIRES_NIL_TERMINATION 的写法
  9. 内存墙,多核CPU的终结者?
  10. 【转CSDN常高伟】如何学习一门新的语言