Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >前缀和以及差分的解题步骤与技巧

前缀和以及差分的解题步骤与技巧

作者头像
xbhog
发布于 2021-02-04 01:56:26
发布于 2021-02-04 01:56:26
38500
代码可运行
举报
文章被收录于专栏:开发技能乱炖开发技能乱炖
运行总次数:0
代码可运行

前缀和以及差分问题:

导论:

该博客记录前缀和问题以及差分的解题步骤与相应公式;

理解其中变化,有不完善的地方慢慢补全;

如果有错误欢迎指出!

前缀和:

首先需要知道前缀和的概念:即数组该位置之前的元素之和。

还有一个重要的点,在进行前缀和的运算时,下标从1开始,设数组a[0]=0;

比如a[5] = {0,1,2,3,4};

求a[1]的前缀和:a[1];

求a[2]的前缀和:a[1]+a[2];

为什么下标要从1 开始:为了方便后面的计算,避免下标转换,设为零,不影响结果

前缀和的作用: 快速求出元素组中某段区间的和

一维数组的前缀和问题:

求数组a中(l,r)区间的和 —>用到前缀和

二维数组的前缀和问题:

方法与一维数组大体相同:需要中间数组s[i][j]

差分问题:

首先明白差分的概念:差分其实就是前缀和的逆运算

差分的作用:如果对某个区间需要每个元素加上C则需要使用差分来减少时间复杂度

差分的重点是:构造临时数组b[]

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
b[1] = a[1]
b[2] = a[2] - a[1]
b[3 ]= a[3] - a[2]
...
b[n] = a[n] - a[n-1]

两个数组:S[],b[],S[]称为b[]的前缀和,b[]称为S[]的差分

差分的下标也是从1开始

前缀和差分是2个互逆的运算,假设最开始的数组是a[i], 则前缀和数组sum[i]表示从a[1]+…+a[i];而差分数组b[1]+…+b[i]则表示a[i],即a[i]是差分数组b[i]的前缀和;

一维数组的差分问题:

二维数组的差分问题:

记住:a[][]数组是b[][]数组的前缀和数组,那么b[][]a[][]的差分数组

二维差分的核心也是构造差分数组b[][],使得a数组中a[i][j]是b数组左上角(1,1)到右下角(i,j)所包围矩形元素的和;

怎么让子矩阵中的每个元素加上c;

先定义一个函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static void insert(int x1,int y1,int x2,int y2,int c){
    b[x1][y1] += c;
    b[x2+1][y1] -=c;
    b[x1][y2+1] -=c;
    b[x2+1][y2+1] +=c;
}

结束:

感谢各位能看到最后

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/01/30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【算法/学习】前缀和&&差分
差分数组的好处是可以简化运算,例如想要给一个区间 [l,r] 上的数组加一个常数c,原始的方法是依次加上c,这样的时间复杂度是O(n)的。但是如果采用差分数组的话,可以大大降低时间复杂度到O(1)。
IsLand1314
2024/10/15
1370
【算法/学习】前缀和&&差分
前缀和,差分
前缀和:什么是前缀和,顾名思义前面数字的和嘛,对于一组数据,a1,a2,a3,a4,……an 1到4的前缀和就是a1+a2+a3+a4. 3到7的前缀和就是a3+a4+a5+a6+a7. 前缀和解释完毕。如果用s集合表示前缀和,下标i表示1到i的前缀和,那么s[i]=s[i-1]+a[i]. 二维前缀和: s[i][j]表示第i行,第j列的前缀和,第i行和第j列包含的左上角的加起来的和就是前缀和,如图:红色的部分就是前缀和了。
code-child
2023/05/30
2740
前缀和,差分
【算法】前缀和与差分
前缀和可以快速求出原数组里面一段数的和。比如求一段区间[l,r],如果按照原来的做法,需要循环一遍,O(n),有前缀和的算法:
平凡的人1
2023/10/15
3050
【算法】前缀和与差分
前缀和与差分 Krains 2020-07-28 16:05:15
s[i]=a[0]+a[1]+a[2]+...+a[i−1]s[i] = a[0]+a[1]+a[2]+...+a[i-1]s[i]=a[0]+a[1]+a[2]+...+a[i−1]
Krains
2020/08/05
2850
前缀和、二维前缀和与差分的小总结
如果我给你一串长度为n的数列a1,a2,a3......an,再给出m个询问,每次询问给出L,R两个数,要求给出区间[L,R]里的数的和,你会怎么做,若是没有了解过前缀和的人看到这道题的想法可能是对于m次询问,我每次都遍历一遍它给的区间,计算出答案,这样子的方法固然没错,但是其时间复杂度达到了O(n*n),如果数据量稍微大一点就有可能超时,而我们如果使用前缀和的方法来做的话就能够将时间复杂度降到O(n+m),大大节省了运算时间。至于怎么用,请看下面一小段代码
ACM算法日常
2019/07/05
2.5K0
基础算法篇——前缀和与差分
基础算法篇——前缀和与差分 本次我们介绍基础算法中的前缀和与差分,我们会从下面几个角度来介绍前缀和与差分: 前缀和介绍 一维前缀和 二维前缀和 差分介绍 一维差分 二维差分 前缀和介绍 首先我们来简单介绍一下前缀和: 我们首先定义一个长度为n的数组,然后我们希望求这个数组的部分长度的总和 如果正常采用我们的for循环来遍历一遍的话: 复杂度为O(n) 这时如果我们提前将这些数据保存起来,在多次查询时就会方便很多: 我们将数组的第i个值定义为ai 我们将数组的前n个值的和定义为Sn 其实就是类似于我们数学上的
秋落雨微凉
2022/11/16
3000
一维 二维求前缀和、差分
用户10604450
2024/03/15
1050
前缀和与差分数组(附练习题)
题目: 输入一个长度为n的整数序列。 接下来再输入m个询问,每个询问输入一对l, r。 对于每个询问,输出原序列中从第l个数到第r个数的和。
全栈程序员站长
2022/08/30
3960
前缀和与差分数组(附练习题)
小而美的算法技巧:前缀和数组
PS:这是两年前发布的 前缀和技巧:解决子数组问题,我优化并添加了很多内容,这里重新发一遍。
labuladong
2021/12/09
6230
小而美的算法技巧:前缀和数组
【蓝桥杯 | 备赛秘籍】真题解析之差分数组—一维、二维差分一套拿下,附蓝桥杯真题和代码实战!(下)
在二维区间内进行频繁加减操作时,可以使用二维差分数组来优化时间复杂度。具体步骤如下:
计算机魔术师
2025/02/07
1320
一篇带你速通差分算法(C/C++)
差分算法是一种在计算机科学中常用的算法,特别是在处理序列数据时,它可以帮助我们快速计算出序列中相邻元素的差值。时间复杂度可以达到O(1),在C++中实现差分算法不仅可以提高程序的效率,还可以简化代码的复杂度。本文将详细介绍差分算法的原理、C++实现方法以及算法例题。
摆烂小白敲代码
2024/09/23
3320
一篇带你速通差分算法(C/C++)
1. 基础算法初识
逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i<j 且 a[i]>a[j],则其为一个逆序对;否则不是。
浪漫主义狗
2022/07/11
3840
1. 基础算法初识
算法基础学习笔记——④前缀和\差分\双指针\位运算
前缀和:s[i]=a[1]+a[2]+…+a[i] s[0]=0(方便处理边界问题)
命运之光
2024/03/20
1420
算法基础学习笔记——④前缀和\差分\双指针\位运算
初识算法 · 前缀和(1)
​本文的主题是前缀和,通过两道题目讲解,一道是一维数组的模板,一道是二维数组的模板。 链接分别为: 【模板】前缀和_牛客题霸_牛客网 【模板】二维前缀和_牛客题霸_牛客网 题目分为三个部分讲解,一是题目解析,二是算法原理,三是算法编写,那么,话不多说,直接进行主题咯。
_lazy
2024/11/19
970
初识算法 · 前缀和(1)
【C++例题/训练】:前缀和&&差分
前面我们已经通过 【算法/学习】前缀和&&差分-CSDN博客 学习了前缀和&&差分的效相关知识,现在我们开始进行相关题目的练习吧
IsLand1314
2024/10/15
1260
【C++例题/训练】:前缀和&&差分
【C++】前缀和算法专题
⽤ dp[i] 表⽰: [1, i] 区间内所有元素的和,那么 dp[i - 1] ⾥⾯存的就是 [1,i - 1] 区间内所有元素的和,那么:可得递推公式: dp[i] = dp[i - 1] +arr[i] ;
啊QQQQQ
2024/11/19
1010
【C++】前缀和算法专题
差分算法及模板详解
然后构造数组b,b[1],b[2]…b[n]为差分数组。其中通过差分数组的前缀和来表示a数组,即a[n] = b[1] + b[2]+…+b[n]。
timerring
2023/05/24
9940
差分算法及模板详解
算法基础(五)| 差分算法及模板详解
然后构造数组b,b[1],b[2]…b[n]为差分数组。其中通过差分数组的前缀和来表示a数组,即a[n] = b[1] + b[2]+…+b[n]。
timerring
2022/10/28
1.3K0
算法基础(五)| 差分算法及模板详解
前缀和数组(算法)
前缀和(Prefix Sum)是指数组中某个位置之前的所有元素的和。对于数组 arr,其前缀和数组 prefixSum 定义为:
猫咪-9527
2025/01/13
1390
前缀和数组(算法)
《算法竞赛进阶指南》0x03 前缀和与差分
这有助于我们把原序列的 “区间操作” 转化为差分序列上的 “单点操作” 进行计算,从而降低求解难度
一只野生彩色铅笔
2022/10/31
8560
相关推荐
【算法/学习】前缀和&&差分
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验