首页 > 其他分享 >在做题中学习(62):矩阵区域和

在做题中学习(62):矩阵区域和

时间:2024-05-29 22:00:42浏览次数:22  
标签:mat int 矩阵 62 vector 做题 answer dp 前缀

1314. 矩阵区域和 - 力扣(LeetCode)

解法:二维前缀和

思路:读题画图才能理解意思:dun点点的是mat中的一个数,而要求的answer同位置的数 = 以点为中心上下左右延长 k 个单位所围成长方形的和。

因为最后answer中的每一个数都是mat一部分区域的和,所以就想到了二维前缀和模板:

在做题中学习(56):二维前缀和模板-CSDN博客

而对于右边图的情况:显然是无法取到边界以外的值的,所以需要处理边界情况:

细节

1.与二维前缀和模板不同的是,这题的mat下标是从0开始的,所以前缀和数组dp需要+1行1列

就是:填dp[1][1]时,公式的mat值是mat[0][0]的。

           填answer时,是用dp的值,而dp的值是从[1][1]才生效的。

2.dp+1行1列,所以遍历时从1开始,再多遍历一次。

3.填dp值时,公式中有关用到mat的值的下标要-1.

4.填answer值时,可以在公式处每个下标+1,也可以直接在求x1,y1,x2,y2时+1.

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));

        //dp多加一行,多加一列
        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] + mat[i-1][j-1] - dp[i-1][j-1];
            }
        }
        //answer
        vector<vector<int>> answer(m,vector<int>(n));
        for(int i = 0;i<m;i++)
        {
            for(int j = 0;j<n;j++)
            {
                int x1,y1,x2,y2;
                x1 = max(0,i-k) + 1;
                y1 = max(0,j-k) + 1;
                x2 = min(m-1,i+k) + 1;
                y2 = min(n-1,j+k) + 1;
                answer[i][j] = dp[x2][y2] - dp[x1-1][y2] - dp[x2][y1-1] + dp[x1-1][y1-1]; 
            }
        }
        return answer;
    }
};

标签:mat,int,矩阵,62,vector,做题,answer,dp,前缀
From: https://blog.csdn.net/yiren_liusong/article/details/139306351

相关文章

  • 矩阵树定理学习笔记
    矩阵树定理学习笔记真的,我这辈子都没有想过行列式还能用到这种地方。定义图的关联矩阵对于一张有\(n\)个点、\(m\)条边的图(对于无向图,可以随便定义边的方向,因为相反的边只需要将对应列乘以\(-1\)即可),我们定义其关联矩阵\(M\)满足:\[M_{i,j}=\left\{\begin{matrix}1&e_j......
  • 省集Test3-D2 T2做题记录
    link一道比较深刻的题目。考虑条件相当于:对于任意\(1\)的个数有限的\(S\),其所有的长度为\(2k+1\)的子串,经过\(p\)的映射后\(1\)的个数不变。统计所有的长度固定的子串信息,我们有一个trick:对于一个长为\(2k+1\)的二进制串\(w\),设其前\(2k\)位和后\(2k\)位组成......
  • Leetcode621. 任务调度器
    EverydayaLeetcode题目来源:621.任务调度器类似题目:1953.你可以工作的最大周数解法1:贪心本质上来说,我们需要构造一个尽量短的,相同元素间隔>=(n+1)的序列。用一个数组cnt统计每个任务的次数。设cnt的元素和为s,这是任务总数,也是序列长度的下界。当存在多个......
  • AGC061C 做题记录
    很具有启发性的题目。link我一开始没什么思路,选择了手动模拟来观察。这道题打破了我的按部就班的步骤:考虑直接创造一个条件,这样就能做到不重复。如果想到了这一点,我们其实就很容易想到这样一个条件:对于一个方案,\(\foralli\in[1,n],\(a_i,b_i)\)中没有其他人登记,那么\(i\)......
  • 小美的平衡矩阵
    一、题目信息二、解题思路1、这里采用C++解答,题目限制如下2、输出要求?根据输出可以看出第一行输出的是所有1*1子矩阵中符合完美矩阵(矩阵中0的个数等于1的个数)条件的矩阵个数,其余输出同理。3、如何遍历所有矩阵采用按行遍历的方式。比如>采用按行遍历的......
  • 推式子的做题记录
    「LOJ#3399」CommunicationNetwork首先列出式子,\(ans=\sum\limits_{T_2}|T_1\capT_2|2^{T_1\capT_2}\)注意到有\(f(S)=\sum\limits_{T\subseteqS}\sum\limits_{T'\subseteqT}(-1)^{T-T'}f(T')\)证明可考虑计算每个\(T'\)的贡献,由于\(T'\subse......
  • 算法导论,矩阵链乘法(动态规划)
    直入主题,5.27学的矩阵链相乘(动态规划)题目理解:        1.原题                要求:对A1,A2,A3......An进行矩阵的乘法(线性代数的基础知识),求通过添加括号,以达到的最小乘法次数    2.题目理解        乘法:由于矩阵乘法的结合......
  • Weblogic T3协议反序列化漏洞[CVE-2018-2628]
    漏洞复现环境搭建请参考http://t.csdnimg.cn/TYtKgkali切换jdk版本请参考Kali安装JAVA8和切换JDK版本的详细过程_kali安装jdk8-CSDN博客漏洞原理T3协议实现Weblogicserver和其他java程序间的数据传输,Weblogic开放7001端口则默认开启T3服务,通过构造恶意的T3协议数据,利用......
  • 推荐二轮电动车仪表盘蓝牙主芯片方案-HS6621CGC
      随着国内二轮电动车的火热开启,电动车的智能化程度越来越高;电动车的智能操控需求也越来越高,现在介绍蓝牙控制面板的一些功能;例如:定位(GNSS),设防,实时上报数据(CAT.1);终端支持蓝牙OTA升级;BMS(蓝牙数传);一键启动;蓝牙钥匙(蓝牙APP解锁,无感解锁)等等功能,这些功能都可以依托OM6621PX系列作为......
  • 最小二乘法-超详细推导(转换为矩阵乘法推导,矩阵求导推导)
    最小二乘法就是让均方误差最小。下面是损失函数转换为矩阵方式的详解如何让其最小,在导数为0的地方取极小值。问:导数为0的地方可能去极大值,也可能是极小值,凭什么说导数为0就是极小值?答:因为使用的是均方误差,他是一个凹函数,导数为0的点即为最小值和极小值。建议学习一下线......