前缀和数组 差分数组

前缀和

一维:通过空间换时间适用于需要频繁查询某一段区间和的场景。

一维数组:

一维前缀和中的每一项:

,该前缀和中的每一项也就是数组中对应的前 i 项和。

一维前缀和数组的构造:

在输入原数组时同步构造前缀和数组可以改写为

cpp 复制代码
for(int i=1;i<=n;i++){
    scanf("%d",&arr[i]);
    crr[i]=crr[i-1]+arr[i];
  }

通常前缀和数组从下标为1开始的值默认为0

一维区间和查询:

查询原数组区间为 [ l , r ] 的元素的和:

二维:通过空间换时间适用于需要频繁查询某一个子矩阵中元素和的场景。

二维数组:

. . . . . . . . . . . . . . .

二维前缀和中的每一项:

,该前缀和中的每一项也就是数组中以这两个元素为对角线构成的矩形中元素和。

二维前缀和数组的构造:

也是在输入原数组时同步构造前缀和数组 根据二维数组一行一行地读入顺序可以改写为 ,运用这种类似于dp的想法就可以实现。

cpp 复制代码
for(int i=1;i<=n;i++){
    int sum=0;
    for(int j=1;j<=m;j++){
      scanf("%d",drr[i][j]);
      sum+=drr[i][j];
      crr[i][j]=crr[i-1][j]+sum;
    }
  }

和一维类似:行和列的都从1开始

二维子矩阵元素和查询:

查询以为对角线构成的子矩阵中元素和:

差分

一维:通过空间换时间适用于需要频繁进行区间数值的批量增减操作的场景。

一维数组:

一维差分数组中的每一项:

一维差分数组的构造:

边输入原数组边构造

cpp 复制代码
for(int i=1;i<=n;i++){
    scanf("%d",arr+i);
    diff[i]=arr[i]-arr[i-1];
  }

一维差分数组与原数组的推导关系: 由差分数组定义移项可得:

一维差分数组实现区间批量增减:

让区间 [ l , r ] 上的元素加x:让 加上x,让 减去x

这种区间批量增减操作是静态的无法一遍查询一边修改,需要统一在差分数组上修改完毕后再通过差分数组与原数组的关系还原回原数组,再实现查询。

二维:等待补充。。。。

相关推荐
楽码41 分钟前
在RestFul接口应用Hmac算法
后端·算法·restful
用户7143109838851 小时前
Claude Code VSCode集成开发指南:AI编程助手完整配置
算法
CoovallyAIHub1 小时前
SOD-YOLO:基于YOLO的无人机图像小目标检测增强方法
深度学习·算法·计算机视觉
许小燚3 小时前
LeetCode——456. 132 模式
算法·leetcode·职场和发展
sali-tec6 小时前
C# 基于halcon的视觉工作流-章29-边缘提取-亚像素
开发语言·图像处理·算法·计算机视觉·c#
屁股割了还要学7 小时前
【数据结构入门】堆
c语言·开发语言·数据结构·c++·考研·算法·链表
阿群今天学习了吗14 小时前
“鱼书”深度学习进阶笔记(3)第四章
人工智能·笔记·python·深度学习·算法
IT猿手15 小时前
2025年最新原创多目标算法:多目标酶作用优化算法(MOEAO)求解MaF1-MaF15及工程应用---盘式制动器设计,提供完整MATLAB代码
算法·数学建模·matlab·多目标优化算法·多目标算法
数据智能老司机18 小时前
图算法趣味学——最大流算法
数据结构·算法·云计算
秋难降19 小时前
【数据结构与算法】———深度优先:“死磕 + 回头” 的艺术
数据结构·python·算法