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

leetcode2536. 子矩阵元素加 1

2536. 子矩阵元素加 1

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

另给你一个二维整数数组 query 。针对每个查询 query[i] = [row1_i, col1_i, row2_i, col2_i] ,请你执行下述操作:

找出 左上角 为 (row1_i, col1_i) 且 右下角 为 (row2_i, col2_i) 的子矩阵,将子矩阵中的 每个元素 加 1 。也就是给所有满足 row1_i <= x <= row2_icol1_i <= y <= col2_imat[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

方法一:二维差分 + 前缀和

题目要求我们对一个 n×nn×nn×n 的整数矩阵 matmatmat 执行多次「矩形内元素加一」的操作,并返回执行完所有操作后的矩阵 matmatmat。在二维情况下,如果对矩形内的所有元素都加一,可以在二维差分数组 diffdiffdiff 上执行以下操作:

diff[row1][col1]+=1 diff[\mathbf{row}_1][\mathbf{col}_1] += 1 diff[row1][col1]+=1

diff[row2+1][col1]−=1 diff[\mathbf{row}_2 + 1][\mathbf{col}_1] -= 1 diff[row2+1][col1]=1

diff[row1][col2+1]−=1 diff[\mathbf{row}_1][\mathbf{col}_2 + 1] -= 1 diff[row1][col2+1]=1

diff[row2+1][col2+1]+=1 diff[\mathbf{row}_2 + 1][\mathbf{col}_2 + 1] += 1 diff[row2+1][col2+1]+=1

那么执行完所有操作后的矩阵 mat 就是在二维差分数组上的前缀和:

mat[i][j]=diff[i][j]+mat[i−1][j]+mat[i][j−1]−mat[i−1][j−1]mat[i][j]=diff[i][j]+mat[i−1][j]+mat[i][j−1]−mat[i−1][j−1]mat[i][j]=diff[i][j]+mat[i1][j]+mat[i][j1]mat[i1][j1]

class Solution {
public:vector<vector<int>> rangeAddQueries(int n, vector<vector<int>>& queries) {vector diff(n + 1, vector<int>(n + 1));for (const auto& query : queries) {int row1 = query[0], col1 = query[1];int row2 = query[2], col2 = query[3];diff[row1][col1] += 1;diff[row2 + 1][col1] -= 1;diff[row1][col2 + 1] -= 1;diff[row2 + 1][col2 + 1] += 1;}vector mat(n, vector<int>(n));for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {int x1 = (i == 0) ? 0 : mat[i - 1][j];int x2 = (j == 0) ? 0 : mat[i][j - 1];int x3 = (i == 0 || j == 0) ? 0 : mat[i - 1][j - 1];mat[i][j] = diff[i][j] + x1 + x2 - x3;}}return mat;}
};
http://www.dtcms.com/a/609945.html

相关文章:

  • 11.6-11.14力扣前缀和刷题
  • vue3.0数据驱动问题
  • Java 8+新特性实战:Lambda表达式、Stream API与函数式编程范式
  • Rust新手第一课:Mac环境搭建踩坑记录
  • 长沙品质网站建设优点wordpress导入插件下载
  • 男的和女的做那个视频网站国内网站建设代理
  • 操作教程 |JumpServer堡垒机数据脱敏功能的使用
  • Ⅰ人工智能学习的核心概念概述+线性回归(1)
  • KKT条件:对偶问题、KKT条件以及内点法
  • 基于ssm的数据标注系统cg4ft3c7(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • Go语言编译器设计器 | 探索Go语言编译器的工作原理与实现技巧
  • c# 集成激光雷达(以思岚A1为例)
  • 大数据运维面试题及答案
  • MySQL数据库索引详解
  • 多通道ADC数模转换器电池管理系统解决方案
  • Java 基础高频38问
  • 煤矿煤质分类数据集3406张5类别
  • MR30分布式I/O模块服务换热站项目,守护万家温暖
  • 唐山市城市建设规划局网站网站首页index.html
  • 大模型架构和原理二
  • 11.14 脚本网页 青蛙过河
  • 【算法专题训练】30、二叉树的应用
  • 深入解析IP, ICMP, OSPF, BGP四大核心网络协议
  • RAG系统中的文本分块技术:从基础策略到智能分块的深度解析
  • Bootstrap 4 Flex布局详解
  • APP网站建设开发企业发展网站建设增城
  • 我做网站了 圆通北京网站建设首选优达
  • Lidar调试记录Ⅲ之Ubuntu22.04+ROS2环境中安装colcon
  • 闵行网站制作设计公司wordpress wp polls
  • IntelliJ IDEA初始化指南