当前位置: 首页 > news >正文

【数据结构-二维前缀和】力扣1314. 矩阵区域和

给你一个 m x n 的矩阵 mat 和一个整数 k ,请你返回一个矩阵 answer ,其中每个 answer[i][j] 是所有满足下述条件的元素 mat[r][c] 的和:

i - k <= r <= i + k,
j - k <= c <= j + k 且
(r, c) 在矩阵内。

示例 1:
输入:mat = [[1,2,3],[4,5,6],[7,8,9]], k = 1
输出:[[12,21,16],[27,45,33],[24,39,28]]

示例 2:
输入:mat = [[1,2,3],[4,5,6],[7,8,9]], k = 2
输出:[[45,45,45],[45,45,45],[45,45,45]]

提示:
m == mat.length
n == mat[i].length
1 <= m, n, k <= 100
1 <= mat[i][j] <= 100

class Solution {
public:vector<vector<int>> matrixBlockSum(vector<vector<int>>& mat, int k) {int m = mat.size(), n = mat[0].size();vector<vector<int>> answer(m, vector<int>(n));vector<vector<int>> sums(m+1, vector<int>(n+1));for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){sums[i+1][j+1] = sums[i][j+1] + sums[i+1][j] - sums[i][j] + mat[i][j];}}for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){int m2 = i+k < m ? i+k : m-1;int n2 = j+k < n ? j+k : n-1;int m1 = i-k >= 0 ? i-k : 0;int n1 = j-k >= 0 ? j-k : 0;answer[i][j] = sums[m2+1][n2+1] - sums[m1][n2+1] - sums[m2+1][n1] + sums[m1][n1];}}return answer;}
};

比较套路的题目,首先计算矩阵每个位置的前缀和,接着来明确answer时候矩阵的边界,然后根据矩阵的范围使用矩阵前缀和的方法计算元素总和。


http://www.mrgr.cn/news/15311.html

相关文章:

  • 【Java 设计模式】Callback 模式:掌握异步通信
  • Docker构建镜像时本地NuGet不存在的解决方式
  • 开源 AI 智能名片 O2O 商城小程序在社交私域中的圈层价值
  • 生成和应用patch
  • Datawhale AI夏令营第五期【深度学习进阶】深度学习基础
  • 数学基础 -- 线性代数之行阶梯形
  • netty编程之实现HTTP服务
  • 【Git】修复Git RPC Failed HTTP 500 curl 22错误
  • 抖音ip会莫名其妙变成北京吗
  • 【数据结构】-----哈希
  • Layer Normalization(层归一化)里的可学习的参数
  • ts 新版的@nestjs/commo下redis的注册使用
  • 【Pyspark-驯化】一文搞懂Pyspark中表连接的使用技巧
  • Java Email发送:如何配置SMTP服务器发信?
  • 亚马逊aws的弹性与可扩展性解析
  • 选择排序【详解】
  • vue报错解决
  • Zabbix 配置win系统登录和钉钉告警
  • python如何另起一行
  • 浅谈【数据结构】栈和队列之队列