前缀和——1314. 矩阵区域和

这篇具有很好参考价值的文章主要介绍了前缀和——1314. 矩阵区域和。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前缀和——1314. 矩阵区域和,原创,刷题,矩阵,线性代数,前缀和,c++

🎤1. 题目

题目链接:1314. 矩阵区域和 - 力扣(LeetCode)

给你一个 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

🎤2. 算法原理

这题的意思就是给我们一个mat矩阵,然后我们返回一个ans矩阵,ans矩阵和mat同等规模,以当前位置为圆心,k为半径,辐射所有元素的和,如下图示例:

前缀和——1314. 矩阵区域和,原创,刷题,矩阵,线性代数,前缀和,c++

这里其实就是一个求二维前缀和的操作,不了解的可以看一下此篇文章:前缀和——DP35 【模板】二维前缀和

初始化前缀和矩阵:

不需要硬记模板,要用的时候,画一个草图,直接推一下就好了

dp[i][i] = dp[i-1][j] + dp[i][j-1] - dp[i-1][j-1] + mat[i][j]

前缀和——1314. 矩阵区域和,原创,刷题,矩阵,线性代数,前缀和,c++

使用前缀和矩阵:

我们要求的最终结果也是,画一个草图,直接推出来

前缀和——1314. 矩阵区域和,原创,刷题,矩阵,线性代数,前缀和,c++

ans = dp[x2][y2] - dp[x1-1][y2] - dp[x2][y1-1] + dp[x1-1][y1-1]

当我们要ans[i][j]这个位置的值的时候,需要找到对应的矩阵。

由于是向四周延申,我们只需要左上角和右下角的坐标即可,即(i-k(j-k)(i+k)(j+k)

边界处理:在找左上角和右下角坐标的时候,可能会发生越界,这里我们需要处理一下。

假设左上角坐标为(x1,y1),那么x1 = max(0,i-k)y1 = max(0,j-k)

右下角坐标为(x2,y2),那么x2 = min(m-1,i+k)y2 = min(n-1,j+k)

前缀和——1314. 矩阵区域和,原创,刷题,矩阵,线性代数,前缀和,c++

下标映射关系:

我们上面这个DP【35】二位前缀和模板这题,下标其实是从(1,1)开始的,而本题是从(0,0)开始的。

所以我们填dp表的时候可以多加一行一列,便于我们处理

前缀和——1314. 矩阵区域和,原创,刷题,矩阵,线性代数,前缀和,c++

那么这里的dp公式需要稍微修改一下:dp[i][i] = dp[i-1][j] + dp[i][j-1] - dp[i-1][j-1] + mat[i-1][j-1]

要填ans去使用这个dp表的时候,下标统一+1,我们可以直接在求下标的时候+1

x1 = max(0,i-k)+1,y1 = max(0,j-k)+1x2 = min(m-1,i+k)+1y2 = min(n-1,j+k)+1

🎤3. 代码实现

class Solution {
public:
    vector<vector<int>> matrixBlockSum(vector<vector<int>>& mat, int k) {
        int m = mat.size(),n = mat[0].size();

        vector<vector<int>> dp(m+1,vector<int>(n+1));
        for(int i=1;i<=m;i++)
        {
            for(int j=1;j<=n;j++)
                dp[i][j] = dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1]+mat[i-1][j-1];
        }
        vector<vector<int>> ans(m,vector<int>(n));
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                int x1 = max(0,i-k)+1, y1=max(0,j-k)+1;
                int x2 = min(m-1,i+k)+1, y2=min(n-1,j+k)+1;
                ans[i][j]=dp[x2][y2]-dp[x1-1][y2]-dp[x2][y1-1]+dp[x1-1][y1-1];
            }
        }
        return ans;
    }
};

运行结果:
前缀和——1314. 矩阵区域和,原创,刷题,矩阵,线性代数,前缀和,c++文章来源地址https://www.toymoban.com/news/detail-772053.html

到了这里,关于前缀和——1314. 矩阵区域和的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 线性代数本质系列(一)向量,线性组合,线性相关,矩阵

    本系列文章将从下面不同角度解析线性代数的本质,本文是本系列第一篇 向量究竟是什么? 向量的线性组合,基与线性相关 矩阵与线性相关 矩阵乘法与线性变换 三维空间中的线性变换 行列式 逆矩阵,列空间,秩与零空间 克莱姆法则 非方阵 点积与对偶性 叉积 以线性变换

    2024年02月04日
    浏览(54)
  • 0203逆矩阵-矩阵及其运算-线性代数

    定义7 对于 n n n 阶矩阵A,如果有一个 n n n 阶矩阵B,使 A B = B A = E AB=BA=E A B = B A = E 则说矩阵A是可逆的,并把矩阵B称为A的逆矩阵,简称逆阵。 定理1 若矩阵A可逆,则 ∣ A ∣ ≠ 0 vert Avert not = 0 ∣ A ∣  = 0 证明: A 可逆,即有 A − 1 ,使得 A A − 1 = E ∣ A A − 1 ∣ = ∣ A

    2024年04月13日
    浏览(60)
  • 高等代数(七)-线性变换03:线性变换的矩阵

    § 3 § 3 §3 线性变换的矩阵 设 V V V 是数域 P P P 上 n n n 维线性空间, ε 1 , ε 2 , ⋯   , ε n varepsilon_{1}, varepsilon_{2}, cdots, varepsilon_{n} ε 1 ​ , ε 2 ​ , ⋯ , ε n ​ 是 V V V 的一组基, 现在我们来建立线性变换与矩阵的关系. 空间 V V V 中任一向量 ξ xi ξ 可以经 ε 1 , ε 2 , ⋯  

    2024年02月20日
    浏览(53)
  • 线性代数|证明:线性变换在两个基下的矩阵相似

    前置定义 1(基变换公式、过渡矩阵) 设 α 1 , ⋯   , α n boldsymbol{alpha}_1,cdots,boldsymbol{alpha}_n α 1 ​ , ⋯ , α n ​ 及 β 1 , ⋯   , β n boldsymbol{beta}_1,cdots,boldsymbol{beta}_n β 1 ​ , ⋯ , β n ​ 是线性空间 V n V_n V n ​ 中的两个基, { β 1 = p 11 α 1 + p 21 α 2 + ⋯ + p n 1 α n β 2

    2024年02月03日
    浏览(54)
  • 【理解线性代数】(四)线性运算的推广与矩阵基础

    工业生产的发展趋势总是从单件生产到批量生产。科学技术研究也是一样,总是从简单计算到复合运算、批量运算。批量意味着生产能力、处理能力的提升。计算机从16位发展到64位,从单核发展到多核;计算机从CPU处理数据发展到GPU处理数据;大数据、人工智能领域的大模型

    2024年02月09日
    浏览(52)
  • 线性代数(4):伴随矩阵、逆矩阵和矩阵的秩

             A 为一个n阶矩阵,行列式 | A | 的每个元素a ij 的代数余子式Aij组成的矩阵叫做伴随矩阵,记作 A* ;         a.  如果 A 矩阵可逆,A* = | A | A^-1         b.  | A | = | A |^(n-1)         c.  ( kA )* = k^(n-1) A*         a.  若矩阵的行列式结果值不等于 0 ,那么这个矩阵就是

    2024年02月08日
    浏览(63)
  • 线性代数笔记11--矩阵空间、秩1矩阵

    1. 矩阵空间 所有的 3 × 3 3 times 3 3 × 3 矩阵构成的空间 M M M 。 考虑空间 M M M 的子空间 上三角矩阵 对称矩阵 对角矩阵 3 x 3 3x3 3 x 3 矩阵空间的基: [ 1 0 0 0 0 0 0 0 0 ] [ 0 1 0 0 0 0 0 0 0 ] [ 0 0 1 0 0 0 0 0 0 ] [ 0 0 0 1 0 0 0 0 0 ] [ 0 0 0 0 1 0 0 0 0 ] [ 0 0 0 0 0 1 0 0 0 ] [ 0 0 0 0 0 0 1 0 0 ] [ 0 0 0 0 0 0

    2024年03月10日
    浏览(48)
  • 0205矩阵分块法-矩阵及其运算-线性代数

    1 分块矩阵的定义 将矩阵A用若干条纵线和横线分成许多个小矩阵,每一个小矩阵称为A的子快,以子块为元素的形式上的矩阵称为分块矩阵。 2 分块矩阵的运算(性质) 设矩阵A与B的行数相同,列数相同,采用相同的分块法,有 A = ( A 11 ⋯ A 1 r ⋮ ⋮ A s 1 ⋯ A s r ) , B = ( B 11 ⋯

    2024年04月26日
    浏览(39)
  • 0202矩阵的运算-矩阵及其运算-线性代数

    定义2 设有两个 m × n mtimes n m × n 橘子 A = ( a i j ) 和 B = ( b i j ) A=(a_{ij})和B=(b_{ij}) A = ( a ij ​ ) 和 B = ( b ij ​ ) ,那么矩阵A与B的和记为A+B,规定为 A + B = ( a 11 + b 11 a 12 + b 12 ⋯ a 1 n + b 1 n a 21 + b 21 a 22 + b 22 ⋯ a 2 n + b 2 n ⋮ ⋮ ⋮ a m 1 + b m 1 a m 2 + b m 2 ⋯ a m n + b m n ) A+B=begin{pmatr

    2024年04月25日
    浏览(49)
  • 【线性代数与矩阵论】Jordan型矩阵

    2023年11月3日 #algebra 在对向量做线性变换时,向量空间的某个向量的方向不发生改变,而只是在其方向上进行拉伸,则该向量是线性变换的特征向量,其在变换中被拉伸的倍数为该特征向量的特征值(特征根)。 矩阵的相同特征值有其对应的代数重数与几何重数,相同特征值

    2024年02月04日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包