前缀和算法求数组中某个区间的

前缀和算法

对于一个数组,我们求数组中某个区间的和,如果通过遍历相加的话,时间复杂度为n。若分别求m个区间的和,则所需时间复杂度为m*n。因此我们可以使用前缀和算法优化它的时间复杂度。

我们可以利用一个数组,存储上面数组中0到每个位置区间的和。

如上图,下面的前缀和数组存储,上面区间和时是从数组1位置开始的,而不是数组0位置开始的。1位置存储的就是上面数组第一个数字到第一个数字区间的和,第2个位置存放的是上面数组第一个数字到第二个数组区间的和。这里前缀和数字从1开始存放,而不是从0开始存放,是为了后面处理边界的问题。

这里我们求前缀和数组中的值时,可以使用前缀和数组该位置对应的上面数组的值加上,前缀和数组该位置上一个位置里面的值,从而优化计算。如,求前缀和数组6下标的值,可以用上面数组第6个数加上前缀和下标5的值。

现在我们知道了从第1个数,到第n个数区间的和,那么我们要求如4到8之间的和,该怎么求呢?

第4个数和第8个数,在上面数组对应坐标为3和7,我们发现,该区间的和,就等于第1个数到第8个数的和减去第一个数的到第3个数的和。

因此转化为公式就是:

如求第n个数,到第m个数这个区间的和。

前缀和数组m - 前缀和数组n-1

这里我们可以看出,为什么前缀和数组要从下标1开始存,比如求第1个数到第4个数区间和,带入公式为前缀和数组4 - 前缀和数组0

相关推荐
王老师青少年编程4 小时前
2025年【江苏“信息与未来”编程思维】真题及题解(T2:坐标变换)
c++·题解·真题·坐标变换·编程思维·江苏·信息与未来
2023自学中7 小时前
C++ 内存追踪器
linux·c++
DogDaoDao12 小时前
【GitHub】 LLVM Project 深度解析:现代编译器基础设施的基石
java·c++·python·程序员·github·编译器·llvm
KuaCpp12 小时前
C++进程(下)
c++
来一碗刘肉面13 小时前
C++中的引用语法
c++·算法
杜子不疼.13 小时前
【Qt初识】工程起步:项目创建、代码解读与对象树
数据库·c++·qt
知无不研14 小时前
算法:Fizz Buzz解题思路
c++·算法·leetcode
汉克老师14 小时前
GESP2026年6月认证C++八级( 第二部分判断题(1-10))精讲
c++·归并排序·dijkstra·二分·互斥·gesp8级·可重复组合
nianniannnn15 小时前
c++复习自存--流、异常处理、多线程与C++工程规范
开发语言·c++
诚信定制83915 小时前
C++23新特性实战与CLion深度支持
开发语言·c++·算法