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

leetcode 2536

2536: 子矩阵元素加1

思路1:暴力解

class Solution {
public:vector<vector<int>> rangeAddQueries(int n, vector<vector<int>>& queries) {vector<vector<int>> ans(n,vector<int>(n,0));for(auto& qur :queries){for(int i=qur[0];i<=qur[2];i++){for(int j=qur[1];j<=qur[3];j++){ans[i][j]++;}}}return ans;}
};

思路2:二维差分+二维前缀和

一维差分,见 leetcode 2528

使用二维差分数组diff,其中diff[i][j]表示原数组mat[i][j]到mat[n-1][n-1]每个元素变化值。

例如将mat[x1][y1]到mat[x2][y2]每个元素值加一,反映到差分数组上就表现为:

diff[x1][y1]+=1,先从mat[x1][y1]到mat[n-1][n-1]每个元素都加一
diff[x2+1][y1]−=1,由于从mat[x2+1][y1]到mat[n-1][n-1]每个元素无需改变,第一步加的范围太大了,不该变的撤销变化
diff[x1][y2+1]−=1,与2同理,由于从mat[x1][y2+1]到mat[n-1][n-1]每个元素无需改变,第一步加的范围太大了,不该变的撤销变化
diff[x2+1][y2+1]+=1,由于第二步和第三步都包含范围mat[x2+1][y2+1],所以这块“重复撤销”了,再加回来
对于每个query,以O(1)的时间复杂度可以计算出diff数组的变化。最终处理完所有query,再由diff差分数组反推出原数组mat就好了。

代码实现时,为方便计算二维前缀和,可以在二维差分矩阵最上面添加一行 0,最左边添加一列 0,这样计算二维前缀和无需考虑下标越界。

  • 公式
    diff[i][j] = diff[i][j] + diff[i-1][j] + diff[i][j-1] - diff[i-1][j-1]
    正是二维前缀和递推式。

class Solution {
public:vector<vector<int>> rangeAddQueries(int n, vector<vector<int>>& queries) {/*二维差分,记录差分数组的变化二维矩阵a的区域+1操作,等价于更新差分矩阵d中4个位置的差分值。为方便计算二维前缀和,在二维差分矩阵上下左右各添加一行0 */vector<vector<int>> diff(n+2,vector<int>(n+2)); //防止越界for(auto& q :queries){int r1=q[0],c1=q[1],r2=q[2],c2=q[3];diff[r1+1][c1+1]++;diff[r1+1][c2+2]--;diff[r2+2][c1+1]--;diff[r2+2][c2+2]++;}// 原地计算 diff 的二维前缀和,然后填入答案vector<vector<int>> ans(n,vector<int>(n));for(int i=0;i<n;i++){for(int j=0;j<n;j++){  diff[i+1][j+1]+=diff[i][j+1]+diff[i+1][j]-diff[i][j];ans[i][j]=diff[i+1][j+1];}}return ans;}
};

http://www.dtcms.com/a/609684.html

相关文章:

  • OpenAI与百度同日竞速,文心5.0以原生全模态重新定义AI理解力
  • 【高级机器学习】 12. 强化学习,Q-learning, DQN
  • 网站怎么做视频的软件泰安有什么互联网公司
  • uniapp h5 app 小程序获取当前定位
  • 重庆潼南网站建设哪家好沈阳市建设工程安全监督站网站
  • [特殊字符] 嵌入式音频接口全景图解:I2S、TDM、PDM、SPDIF、AC’97 与 PCM 的关系
  • 从 API 到应用:用 Rust 和 SQLx 为 Axum 服务添加持久化数据库
  • 【高级机器学习】 9. 代理损失函数的鲁棒性
  • 测试之测试用例篇
  • 做网站优化推广的好处网站界面设计实验报告
  • 自建node云函数服务器
  • TRO侵权预警|Lauren动物插画发起维权
  • Rust实战:使用Axum和SQLx构建高性能RESTful API
  • 波动率曲面分解法在期货价差套利策略中的应用研究
  • 泌阳县住房建设局网站网站seo排名优化工具在线
  • 电子商务网站建设课北京建设网官方网站
  • vr大空间体验馆,vr大空间是什么意思啊?
  • Node.js实现WebSocket教程
  • 朝阳区搜索优化seosem百度seo关键词排名优化工具
  • C++初阶
  • NFS:K8s集群的跨主机存储方案
  • 动态设计网站制作wordpress
  • 短临 Nowcast 在分布式光伏的落地:分钟级降水与云量对 Irradiance 的影响(工程版)
  • linux centos 防火墙操作命令
  • 破解行业绿电直供痛点:直连架构适配关键技术解析
  • token无感刷新全流程
  • MySQL 数据增删改查
  • 浏阳做网站的公司价格网站设计步骤详解
  • 南京做网站外包试论述网上商城的推广技巧
  • 面试150——二叉树