news 2026/4/18 3:30:22

前缀和与差分:从一维到二维的高效数据操作技巧(Java版)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
前缀和与差分:从一维到二维的高效数据操作技巧(Java版)

前缀和与差分....

  • 前缀和与差分:从一维到二维的高效数据操作技巧(Java版)
      • 推荐视频:
    • 一、一维前缀和:快速查区间和
      • 题目描述:给定长度为 n的数组,有 q次查询,每次查询区间 [L,R]的元素和,请输出每次查询结果。
      • 核心思想
      • 图片解释
      • 一维前缀和:文字版分解动画
      • 核心Java代码
      • 适用场景
    • 二、一维差分:快速改区间值
      • 题目描述:给定初始全 0 的数组,有 m次操作,每次操作对区间 [L,R]加 k,操作完成后输出最终数组。
      • 核心思想
      • 图片解释
      • 原理:
        • 因为差分数组中,标记位加了一个数还原成原数组的时候,后面的数都会累加,然后在R+1位再减去这个数停止累加!!!
      • 一维差分:文字版分解动画
      • 核心Java代码
      • 适用场景
    • 三、二维前缀和:快速查矩阵子矩形和
      • 题目描述:给定 n×m 的矩阵,有 q次查询,每次查询子矩形 [(x1,y1),(x2,y2)]的元素和,请输出每次查询结果。
      • 核心思想
      • 图片解释
      • 二维前缀和:文字版分解动画
      • 核心Java代码
      • 适用场景
    • 四、二维差分:快速改矩阵子矩形值
      • 题目描述:给定初始全 0 的 n×m矩阵,有 k 次操作,每次操作对子矩形 [(x1,y1),(x2,y2)] 加 val,操作完成后输出最终矩阵。
      • 核心思想
      • 图片解释
      • 二维差分:文字版分解动画
      • 核心Java代码
      • 适用场景
    • 五、核心总结
      • 关键注意点

前缀和与差分:从一维到二维的高效数据操作技巧(Java版)

前缀和与差分是算法中经典的数据预处理技巧,能将数组/矩阵的区间查询、区间修改时间复杂度从O ( n ) O(n)O(n)/O ( n m ) O(nm)O(nm)优化到O ( 1 ) O(1)O(1),是刷题和工程开发中处理区间问题的“利器”。本文从一维到二维,结合Java实战代码,拆解核心逻辑与应用场景。

推荐视频:

前缀和与差分视频【共四集视频】

一、一维前缀和:快速查区间和

题目描述:给定长度为 n的数组,有 q次查询,每次查询区间 [L,R]的元素和,请输出每次查询结果。

核心思想

前缀和数组preSum中,preSum[i]表示原数组前i个元素的和。通过预处理前缀和,任意区间[L, R]的和可通过preSum[R] - preSum[L-1]直接计算(索引从1开始,避免边界处理)。

图片解释


一维前缀和:文字版分解动画

核心Java代码

importjava.util.Scanner;// 一维前缀和核心实现(索引1开始)publicclassPrefixSum1D{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);intn=sc.nextInt();// 数组长度intq=sc.nextInt();// 查询次数int[]arr=newint[n+1];// 原数组(1-based)// 输入原数组for(inti=1;i<=n;i++){arr[i]=sc.nextInt();}// 构建前缀和数组int[]preSum=newint[n+1];for(inti=1;i<=n;i++){preSum[i]=preSum[i-1]+arr[i];}// 处理查询for(inti=0;i<q;i++){intL=sc.nextInt();intR=sc.nextInt();intsum=preSum[R]-preSum[L-1];System.out.println(sum);}sc.close();}}

适用场景

  • 多次查询数组子区间和(如成绩区间总分、子数组和统计)

二、一维差分:快速改区间值

题目描述:给定初始全 0 的数组,有 m次操作,每次操作对区间 [L,R]加 k,操作完成后输出最终数组。

核心思想

差分是前缀和的逆运算,差分数组diff标记区间修改的“起点”和“终点”:对[L, R]k,只需diff[L] += kdiff[R+1] -= k(多开一位避免越界),最后对diff求前缀和即可还原修改后的数组。

图片解释


原理:

因为差分数组中,标记位加了一个数还原成原数组的时候,后面的数都会累加,然后在R+1位再减去这个数停止累加!!!

一维差分:文字版分解动画

核心Java代码

// 一维差分核心实现(索引1开始)importjava.util.Arrays;importjava.util.Scanner;publicclassDifference1D{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);intn=sc.nextInt();// 数组长度intm=sc.nextInt();// 操作次数int[]diff=newint[n+2];// 差分数组(多开1位避免越界)// 处理区间修改操作for(inti=0;i<m;i++){intL=sc.nextInt();intR=sc.nextInt();intk=sc.nextInt();diff[L]+=k;diff[R+1]-=k;}// 还原数组(对差分数组求前缀和)int[]res=newint[n];intcur=0;for(inti=1;i<=n;i++){cur+=diff[i];res[i-1]=cur;}// 输出结果System.out.println(Arrays.toString(res).replaceAll("[\\[\\],]",""));sc.close();}}

适用场景

  • 多次批量修改数组区间值(如区间加减、数据批量更新)
  • 蓝桥杯常考:结合差分解决 “区间操作后统计数组特征”(如最大值、平均值)。

三、二维前缀和:快速查矩阵子矩形和

题目描述:给定 n×m 的矩阵,有 q次查询,每次查询子矩形 [(x1,y1),(x2,y2)]的元素和,请输出每次查询结果。

核心思想

二维前缀和数组preSum[i][j]表示以(1,1)为左上角、(i,j)为右下角的矩形和。递推公式需补偿重复累加的区域,子矩形和通过“大减小、加补偿”计算。

图片解释





二维前缀和:文字版分解动画

核心Java代码

importjava.util.Scanner;// 二维前缀和核心实现(索引1开始)publicclassPrefixSum2D{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);intn=sc.nextInt();// 行数intm=sc.nextInt();// 列数intq=sc.nextInt();// 查询次数// 输入矩阵(1-based)int[][]matrix=newint[n+1][m+1];for(inti=1;i<=n;i++){for(intj=1;j<=m;j++){matrix[i][j]=sc.nextInt();}}// 构建二维前缀和数组int[][]preSum=newint[n+1][m+1];for(inti=1;i<=n;i++){for(intj=1;j<=m;j++){preSum[i][j]=preSum[i-1][j]+preSum[i][j-1]-preSum[i-1][j-1]+matrix[i][j];}}// 处理查询for(inti=0;i<q;i++){intx1=sc.nextInt();inty1=sc.nextInt();intx2=sc.nextInt();inty2=sc.nextInt();// 子矩形和公式:大减小 + 补偿intsum=preSum[x2][y2]-preSum[x1-1][y2]-preSum[x2][y1-1]+preSum[x1-1][y1-1];System.out.println(sum);}sc.close();}}

适用场景

  • 矩阵子区域和查询(如图像局部亮度统计、二维数据区间分析);
  • 蓝桥杯常考:结合二维前缀和解决 “矩阵中子矩形满足条件的数量”“最大子矩形和” 等问题。

四、二维差分:快速改矩阵子矩形值

题目描述:给定初始全 0 的 n×m矩阵,有 k 次操作,每次操作对子矩形 [(x1,y1),(x2,y2)] 加 val,操作完成后输出最终矩阵。

核心思想

二维差分通过4个标记点实现子矩形批量修改:对(x1,y1)-(x2,y2)k,只需修改diff[x1][y1]diff[x1][y2+1]diff[x2+1][y1]diff[x2+1][y2+1],最后对diff求二维前缀和还原矩阵。

图片解释



二维差分:文字版分解动画

核心Java代码

importjava.util.Scanner;// 二维差分核心实现(索引1开始)publicclassDifference2D{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);intn=sc.nextInt();// 行数intm=sc.nextInt();// 列数intk=sc.nextInt();// 操作次数// 差分数组(多开1行1列,避免越界)int[][]diff=newint[n+2][m+2];// 处理子矩形修改操作for(inti=0;i<k;i++){intx1=sc.nextInt();inty1=sc.nextInt();intx2=sc.nextInt();inty2=sc.nextInt();intval=sc.nextInt();// 二维差分4个标记点diff[x1][y1]+=val;diff[x1][y2+1]-=val;diff[x2+1][y1]-=val;diff[x2+1][y2+1]+=val;}// 还原矩阵(对差分数组求二维前缀和)int[][]res=newint[n+1][m+1];for(inti=1;i<=n;i++){for(intj=1;j<=m;j++){// 求前缀和res[i][j]=res[i-1][j]+res[i][j-1]-res[i-1][j-1]+diff[i][j];// 输出当前行(去掉最后一列的空格)System.out.print(res[i][j]+(j==m?"\n":" "));}}sc.close();}}

适用场景

  • 矩阵子区域批量修改(如图像局部调色、二维数据批量更新);
  • 蓝桥杯常考:结合二维差分解决 “多次矩阵区间操作后统计极值”“矩阵操作后满足条件的子矩形数量” 等问题。

五、核心总结

技巧核心操作时间复杂度(预处理/单次操作)
一维前缀和区间和查询O ( n ) O(n)O(n)/O ( 1 ) O(1)O(1)
一维差分区间批量修改O ( n ) O(n)O(n)/O ( 1 ) O(1)O(1)
二维前缀和子矩形和查询O ( n m ) O(nm)O(nm)/O ( 1 ) O(1)O(1)
二维差分子矩形批量修改O ( n m ) O(nm)O(nm)/O ( 1 ) O(1)O(1)

关键注意点

  1. 索引建议从1开始,避免边界越界问题;
  2. 差分操作后必须通过前缀和还原数组/矩阵;
  3. 二维前缀和/差分需注意“重复区域补偿”逻辑。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 20:40:43

生成式引擎优化:AI时代内容呈现的新策略

伴随生成式人工智能技术迅速发展&#xff0c;内容于AI对话里的表现形式正产生根本性改变&#xff0c;传统搜索引擎优化主要冲着网页排名&#xff0c;在生成式AI时代&#xff0c;一套全新的优化体系出现了&#xff0c;这便是生成式引擎优化。 一套针对GPT、 、等主流AI模型的内容…

作者头像 李华
网站建设 2026/4/18 2:31:11

第8章 风险投资的深度合作与价值共生

第8章 风险投资的深度合作与价值共生 风险投资是企业从初创走向规模化过程中至关重要的助推力量&#xff0c;它不仅是资金的注入&#xff0c;更是战略资源、行业经验和管理智慧的整合。理解风险投资的本质、选择与之相匹配的合作伙伴&#xff0c;并成为其愿意长期支持的创始人&…

作者头像 李华
网站建设 2026/4/18 2:31:20

d3dx9_43.dll文件缺失打不开程序 彻底解决办法 免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/4/17 6:53:27

国产化信创环境下CKEDITOR图片上传PHP如何适配?

&#x1f4dd; .NET CMS企业官网Word一键导入功能开发纪实 &#x1f575;️ 技术调研与选型过程 现状分析 作为广西一名.NET全栈开发者&#xff0c;最近接手的企业CMS官网项目需要增强编辑器功能。客户明确要求&#xff1a; 支持Office全家桶(Word/Excel/PPT)和PDF导入保留…

作者头像 李华
网站建设 2026/4/18 2:26:38

第4章 商业计划书的深度构建与表达策略

第4章 商业计划书的深度构建与表达策略 商业计划书不仅是融资的敲门砖&#xff0c;更是企业战略思考的结晶和与资本市场对话的剧本。一份卓越的商业计划书&#xff0c;应当超越简单的信息罗列&#xff0c;构建一个逻辑严密、证据充分、愿景可信的叙事体系。它需要将创业者的洞…

作者头像 李华