leetcode 304. 二维区域和检索 - 矩阵不可变(前缀和)
给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (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. 二维区域和检索 - 矩阵不可变(前缀和)相关推荐
- 力扣刷题笔记--304 二维区域和检索 - 矩阵不可变 前缀和
304 二维区域和检索 - 矩阵不可变 作者:AC_OIer 链接:https://leetcode-cn.com/problems/range-sum-query-2d-immutable/solu ...
- LeetCode 304. 二维区域和检索 - 矩阵不可变(DP)
1. 题目 2. 解题 类似题目:LeetCode 308. 二维区域和检索 - 可变(前缀和) dp[i][j]数组表示 从左上角到i,j位置的所有和 sum[i+1][j+1]=sum[i+1][ ...
- LeetCode 304. 二维区域和检索 - 矩阵不可变(动态规划)
题目描述 给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2). 上图子矩阵左上角 (row1, col1) = (2, ...
- [力扣] 304. 二维区域和检索 - 矩阵不可变
[力扣] 304. 二维区域和检索 - 矩阵不可变 给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2). 动态规划 求子 ...
- 304. 二维区域和检索 - 矩阵不可变
链接:304. 二维区域和检索 - 矩阵不可变 题解:https://leetcode-cn.com/problems/range-sum-query-2d-immutable/solution/er ...
- 【二维前缀和】304. 二维区域和检索 - 矩阵不可变
目录 题目 前缀和解法(二维) 二维vector 定义 这道题是「303. 区域和检索 - 数组不可变」的进阶,第 303 题是在一维数组中做区域和检索,这道题是在二维矩阵中做区域和检索. 题目 30 ...
- leetcode 304. Range Sum Query 2D - Immutable |304. 二维区域和检索 - 矩阵不可变(二维前缀和问题)
题目 https://leetcode.com/problems/range-sum-query-2d-immutable/ 题解 本题是 medium 难度,二维前缀和问题.相似题目有: Easy: ...
- leetcode304. 二维区域和检索 - 矩阵不可变
给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2). 上图子矩阵左上角 (row1, col1) = (2, 1) ,右 ...
- leetcode算法题--二维区域和检索 - 矩阵不可变
原题链接:https://leetcode-cn.com/problems/range-sum-query-2d-immutable/ 1.暴力(超时) class NumMatrix {public ...
最新文章
- 2017年计算机四级试题,2017年全国计算机四级考试模拟试题与答案
- C++Adaline自适应线性神经网络算法(附完整源码)
- C语言二进制转换为十六进制(附完整源码)
- 关于大龄程序员的谣言 新手必读
- bug?VS2010中CImageList::DrawIndirect总是返回失败
- windows.open()参数列表
- idea 改变输出语句的颜色 工具类
- Excel文件输出到浏览器
- UltraWebGrid两种显示样式
- 计算机里的音乐怎么设置,realtek高清晰音频管理器怎么设置
- 软件人才争夺战日趋白热化
- java qq协议 php_Java基于JavaMail实现向QQ邮箱发送邮件
- android7.1索尼,Xperia 1
- Linux 网络编程socket错误分析
- 【Linux】虚拟机VMware的Ubuntu使用vi指令的方向键和backspace空格键乱码
- bzoj4453: cys就是要拿英魂!(后缀数组+单调栈+set)
- 常用的在线JS解密工具
- Sql server找不到启动图标
- python之用scapy分层解析pcap报文(Ethernet帧、IP数据包、TCP数据包、UDP数据包、Raw数据包)
- 当代人工智能复习2022