首页 > 其他分享 >区间DP-二维前缀和-差分-6292. 子矩阵元素加 1

区间DP-二维前缀和-差分-6292. 子矩阵元素加 1

时间:2023-01-15 17:56:04浏览次数:65  
标签:matrix int self 矩阵 6292 差分 dp sumRegion DP

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

Description

Difficulty: 中等

Related Topics: 设计, 数组, 矩阵, 前缀和

给定一个二维矩阵 matrix以下类型的多个请求:

  • 计算其子矩形范围内元素的总和,该子矩阵的 左上角(row1, col1)右下角(row2, col2)

实现 NumMatrix 类:

  • NumMatrix(int[][] matrix) 给定整数矩阵 matrix 进行初始化
  • int sumRegion(int row1, int col1, int row2, int col2) 返回 左上角 (row1, col1) 、右下角 (row2, col2) 所描述的子矩阵的元素 总和

示例 1:

输入: 
["NumMatrix","sumRegion","sumRegion","sumRegion"]
[[[[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]]],[2,1,4,3],[1,1,2,2],[1,2,2,4]]
输出: 
[null, 8, 11, 12]

解释:
NumMatrix numMatrix = new NumMatrix([[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]]);
numMatrix.sumRegion(2, 1, 4, 3); // return 8 (红色矩形框的元素总和)
numMatrix.sumRegion(1, 1, 2, 2); // return 11 (绿色矩形框的元素总和)
numMatrix.sumRegion(1, 2, 2, 4); // return 12 (蓝色矩形框的元素总和)

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= m, n <= 200
  • -105 <= matrix[i][j] <= 105
  • 0 <= row1 <= row2 < m
  • 0 <= col1 <= col2 < n
  • 最多调用 104 次 sumRegion 方法

Solution

二维前缀和模版题。
Language: Python3

class NumMatrix:

    def __init__(self, matrix: List[List[int]]):
        if not matrix or not matrix[0]:
            self.dp = None
        m, n = len(matrix), len(matrix[0])
        self.dp = [[0] * (n + 1) for _ in range(m + 1)]
        for i in range(m):
            for j in range(n):
                self.dp[i + 1][j + 1] = self.dp[i][j + 1] + self.dp[i + 1][j] - self.dp[i][j] + matrix[i][j]

    def sumRegion(self, row1: int, col1: int, row2: int, col2: int) -> int:
        if not self.dp: return 0
        return self.dp[row2 + 1][col2 + 1] - self.dp[row2 + 1][col1] - self.dp[row1][col2 + 1] + self.dp[row1][col1]




# Your NumMatrix object will be instantiated and called as such:
# obj = NumMatrix(matrix)
# param_1 = obj.sumRegion(row1,col1,row2,col2)

6292. 子矩阵元素加 1

Description

Difficulty: 中等

Related Topics:

给你一个正整数 n ,表示最初有一个 n x n 、下标从 0 开始的整数矩阵 mat ,矩阵中填满了 0 。

另给你一个二维整数数组 query 。针对每个查询 query[i] = [row1i, col1i, row2i, col2i] ,请你执行下述操作:

  • 找出 左上角 为 (row1i, col1i) 且 右下角 为 (row2i, col2i) 的子矩阵,将子矩阵中的 每个元素1 。也就是给所有满足 row1i <= x <= row2i 和 col1i <= y <= col2imat[x][y]1

返回执行完所有操作后得到的矩阵 mat

示例 1:

输入:n = 3, queries = [[1,1,2,2],[0,0,1,1]]
输出:[[1,1,0],[1,2,1],[0,1,1]]
解释:上图所展示的分别是:初始矩阵、执行完第一个操作后的矩阵、执行完第二个操作后的矩阵。
- 第一个操作:将左上角为 (1, 1) 且右下角为 (2, 2) 的子矩阵中的每个元素加 1 。 
- 第二个操作:将左上角为 (0, 0) 且右下角为 (1, 1) 的子矩阵中的每个元素加 1 。 

示例 2:

输入:n = 2, queries = [[0,0,1,1]]
输出:[[1,1],[1,1]]
解释:上图所展示的分别是:初始矩阵、执行完第一个操作后的矩阵。 
- 第一个操作:将矩阵中的每个元素加 1 。

提示:

  • 1 <= n <= 500
  • 1 <= queries.length <= 104
  • 0 <= row1i <= row2i < n
  • 0 <= col1i <= col2i < n

Solution

二维差分前缀和模版题。
Language: Python3

class Solution:
    def rangeAddQueries(self, n: int, queries: List[List[int]]) -> List[List[int]]:
        mat = [[0] * n for _ in range(n)]
        for x1, y1, x2, y2 in queries:
            for i in range(x1 ,x2 + 1):
                for j in range(y1, y2 + 1):
                    mat[i][j] += 1
        return mat

标签:matrix,int,self,矩阵,6292,差分,dp,sumRegion,DP
From: https://www.cnblogs.com/hyserendipity/p/17053842.html

相关文章

  • 用模仿学习来学习POMDP中的信念表示
    一、研究对象本文研究了POMDP的模仿学习问题,具体来说本文在POMDP中引入了一种的信念表示学习方法,用于生成对抗模仿学习,不同于以往单独训练信念模块和策略,我们对信念模块和......
  • 怎么取消 Windows Server 2012 RDP 限制每个用户只能进行一个会话
    在WindowsServer2008/2008R2上,如果希望多个远程用户使用同一个账号同时访问服务器的RemoteDesktop(RDP),只需通过管理工具-远程桌面下的“远程桌面会话主机配置”进行......
  • Sub-process /usr/bin/dpkg returned an error code (1)解决方案
    第一步:创建一个干净的dpkg文件夹sudomv/var/lib/dpkg/info/var/lib/dpkg/info.bak//先将info文件夹更名sudomkdir/var/lib/dpkg/info//再新建一个新的info文件夹......
  • 区间dp模板
    该死的csdn登陆不上去了,为了防止区间dp模板丢失,在这里再存一份然后是左右取数字的问题,我记得20年的时候我应该看过这题,是有一个数列,前后取若干个数字,问先手能取最大值那......
  • bzoj 2554 Color 期望DP
    期望DP枚举最终能成为哪个颜色,把这个颜色看做白球,其余颜色看成黑球。最后分别把每种颜色的期望加起来就行。考虑当前有i个白球,全变成白球期望步数设为f[i]一次操作可能......
  • 计数 dp 目录
    数え上げテクニック集笔记。引言OI中有三大专题:dp,数据结构,图论。而在这三大专题中,因为dp是从小问题的解法上升至大问题的解法的关键;所以dp,在这三大专题中,优先性是......
  • 动态dp
    两天时间学习了动态dp。题目洛谷P4719首先我们假设如果它是普通dp。设计状态\(f[i][0/1]\)表示以\(i\)为根的子树中选或不选\(i\)结点的最大独立集的值。状态转移\(f[......
  • Luogu7509 撕裂消除 - 期望dp -
    题目链接:https://www.luogu.com.cn/problem/P7509题解:设\(dp[i][j][0/1]\)表示考虑到第\(i\)个位置,已经形成了极大的\(j\)段,当前位置为0/1的期望值;\(g[i][j][0......
  • 通过tcpdump抓取lldp/cdp报文判断服务器上联网络配置
    在一般运维工作中,时常要检查服务器的网络配置,例如服务器有几个网卡,有没有做绑定,上联网络情况等。一般可以从以下几个方面判断:查看布线表查看CMDB搜索相关信息通过上行交换机......
  • 动态规划笔记(一):初识DP
    动态规划(DP)DP问题特征特征:重叠子问题、最优子结构、无后效性重叠子问题:计算大问题需要重复计算小问题,DP可以避免重复计算,代价是消耗更多的空间最优子结构:大问题的最优......