OI基础——前缀和与差分

简介: 前缀和与差分是常用的时间复杂度优秀的线性数据。

前缀和与差分

  • 引入
    如果给你一个数组,让你对于给出的[L,R]区间中的数据加上1,相信这是非常容易实践的,只需要暴力就完全可以解决这个问题。
    但是在算法竞赛中,像这样的暴力做法很可能会导致TLE,导致我们不能拿到全部分数。
    于是我们有了前缀和与差分。
    (本文章中只涉及到一维的前缀和与差分。)

  • 前缀和
    前缀和,顾名思义就是将前缀的数据加到一起。将文字转化为代码会更容易理解。

    pre[0] = 0;
    for(int i = 1; i <= n; i++)
       pre[i] = pre[i - 1] + a[i];
    

    仔细理解上面三行代码的功能,相信大家都已经理解了。

  • 差分
    前缀和与差分总是结伴出现,这肯定是有原因的。
    如果一个数组a是数组b的前缀和数组,那么数组b就是数组a的差分数组。

    b[i]=a[i]-a[i];
    

    对前缀和数组进行差分操作或者对差分数组进行一个前缀和操作就可以还原出原数组
    当将[L,R]区间上的a数组全部加上x,也就是将b[L]+=x,b[R+1]-=x;(注意此处的R+1。因为b[R]仍是要+x的,所以在b[R+1]才开始-x。)

在实际的算法竞赛中,前缀和与差分数组通常是配合使用的。

目录
相关文章
|
2月前
|
人工智能 算法 JavaScript
【算法】前缀和与差分
算法学习——前缀和与差分(含一维和二维)
32 4
【算法】前缀和与差分
|
4月前
|
算法 C++
c++算法学习笔记 (5)前缀和+差分
c++算法学习笔记 (5)前缀和+差分
|
4月前
|
算法 测试技术 C++
【分解质因数 差分数组】2584. 分割数组使乘积互质
【分解质因数 差分数组】2584. 分割数组使乘积互质
【分解质因数 差分数组】2584. 分割数组使乘积互质
|
4月前
|
存储 人工智能 BI
差分与前缀和
差分与前缀和
28 0
|
4月前
|
人工智能 算法
基础算法--前缀和与差分
基础算法--前缀和与差分
|
4月前
|
人工智能 移动开发 算法
算法基础:前缀和与差分
算法基础:前缀和与差分
64 1
算法基础:前缀和与差分
LeetCode-798 得分最高的最小论调 及差分和前缀和的学习
LeetCode-798 得分最高的最小论调 及差分和前缀和的学习
|
10月前
|
算法
算法学习--前缀和与差分
算法学习--前缀和与差分
|
11月前
|
算法 测试技术 C#
C++前缀和算法:构造乘积矩阵
C++前缀和算法:构造乘积矩阵