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

[LC优选算法#19] 前缀和 | 连续数组 | 矩阵区域和

1. 连续数组

连续数组

解题思路:

  1. 暴力O(N^2):枚举所有子数组,判断数组内部的0,1数量是否满足要求。

不难发现,本题和前几道前缀和题目的要求类似,都是在一个数组中找一段区间。如果使用前缀和的方法,本题就转化为找出一段和固定的连续区间。由于0在加法中很难体现,因此考虑将0看作-1,这样题目就变为:找一段连续的区间,使得这段区间的和为0。于是,思路就和上一题查找和为k的子数组很类似了。

  1. 前缀和+哈希表时O(N)空O(N):引入哈希表存储子串的前缀和,转化为在数组中查找和为0区间和

注意点:需要留意哈希表下标为0的位置是初始化为-1而不是0,因为在思路上我们将0当作-1看待。同时,因为求的是最长数组的长度,因此哈希表的第二个参数用于存储下标。在遇到重复的sum,我们只需保留最早出现sum的下标即可(长度最大)。

classSolution{public:intfindMaxLength(vector<int>&nums){unordered_map<int,int>hash;intn=nums.size();intsum=0,ret=0;hash[0]=-1;//下标为-1for(inti=0;i<n;i++){sum+=(nums[i]==0?-1:1);if(hash.count(sum)!=0){intlen=i-hash[sum];//注意画图,这里不用加1ret=max(ret,len);}else{hash[sum]=i;}}returnret;}};

2. 矩阵区域和

矩阵区域和

解题思路:
大致题意是求出数组中每个坐标上下左右扩展k格的区间和,并返回新的数组。由于需要连续多次求出二维区间的区间和,因此选用前缀和的思想解决。步骤如下:

  • step1:预处理出一个二维前缀和数组vv
  • step2:创建新数组ret,将每个区间和放入数组的对应位置中
  • step3:返回ret数组

优化点:计算前缀和时,边界情况的处理很复杂,因此我们可以预留第1行和第1列全为0。也就是说mat[i][j]对应的位置为vv[i + 1][j + 1]

本题关键在于:填写ret矩阵时,需要找到原矩阵对应区域的左上角和右下角的坐标,因此一定要勤于画图!!

classSolution{public:vector<vector<int>>matrixBlockSum(vector<vector<int>>&mat,intk){intm=mat.size();intn=mat[0].size();vector<vector<int>>vv(m+1,vector<int>(n+1,0));vector<vector<int>>ret(m,vector<int>(n));//矩阵和for(inti=1;i<=m;i++){for(intj=1;j<=n;j++){vv[i][j]=mat[i-1][j-1]+vv[i-1][j]+vv[i][j-1]-vv[i-1][j-1];}}for(inti=0;i<m;i++){for(intj=0;j<n;j++){intx1=(i-k<0?0:i-k)+1;inty1=(j-k<0?0:j-k)+1;intx2=(i+k>m-1?m-1:i+k)+1;inty2=(j+k>n-1?n-1:j+k)+1;intsum=vv[x2][y2]-vv[x2][y1-1]-vv[x1-1][y2]+vv[x1-1][y1-1];ret[i][j]=sum;}}returnret;}};

// 本期内容就到这里啦,如果对你有帮助,请三连支持!我是青云,我们下期见^_~

http://www.jsqmd.com/news/1153627/

相关文章:

  • 终极密码恢复指南:ArchivePasswordTestTool 免费快速找回加密压缩包密码
  • CS2存储单元批量管理神器:告别繁琐点击,3分钟掌握Casemove高效操作
  • 享界G9用户外配置强化差异化
  • Anthropic Claude API Token 生命周期管理与错误排查实战指南
  • 为什么降重越改越高?如何选能同步降低查重率与AIGC标记的AI工具?
  • 清华大学学位论文终极排版指南:用thuthesis模板告别格式烦恼
  • 模型路由器:AI应用成本优化与智能调度的核心技术
  • 伦敦发布会折射折叠屏全球竞争
  • 18KV绝缘鞋推荐|电工、维修人员为什么都选择它?
  • ChatGPT 免费访问方案对比:3 种主流途径的稳定性与合规性分析
  • 终极Windows和Office激活指南:5分钟搞定永久免费激活方案
  • KMS智能激活脚本终极指南:5分钟免费激活Windows与Office全系列
  • Translumo:如何在3分钟内让任何外文内容秒变中文?
  • 3分钟上手!免费Chrome视频下载插件VideoDownloadHelper完全指南
  • 每日热门skill:输入一个人名,5分钟「蒸馏」出他的大脑:这个开源项目正在重新定义AI的真正用法
  • Codex 用多了才明白:ChatGPT Plus、Pro 5x/20x 到底怎么选?一张开发者核对清单
  • AD5593R与PIC18F96J94的混合信号处理方案
  • 30分钟用AI生成可授权专利草稿:Codex实战与风险规避
  • FOC轮腿机器人:从零构建自平衡机器人的终极指南
  • CompressO:终极媒体压缩解决方案,免费开源实现视频图片大小缩减90%
  • Ubuntu 26.04 LTS 正式将 Arm64 抬上“头等舱“,x86 垄断时代开始松动
  • 终极免费视频压缩方案:如何高效缩减媒体文件90%体积?
  • 深入解析AKShare金融数据接口库的模块化架构设计与高性能数据获取引擎
  • 3分钟完成Windows和Office永久激活的终极指南
  • Kaggle 肥胖预测赛:4模型融合实战,加权法提升准确率至 0.916
  • 科研 Agent 不缺 Tool Calling,缺的是可追溯文档资源包:从 MCP 到 RealDocBench,为什么解析层决定了知识库上限
  • KMS激活神器:一键解决Windows和Office激活难题
  • Windows 11 LTSC企业版如何安装微软商店:3分钟快速解决方案
  • Linux动态壁纸终极指南:如何免费在Linux上运行Wallpaper Engine
  • 基于51单片机的智能空调系统 温度控制 智能家居 红外遥控 万年历321(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_