(前缀和公式的理解)给a1->an,一共N个数字,有M次查询想,每次需要查询区间【L,R】的和,使用简便方法(前缀和公式)可以大幅度减少时间复杂度

前缀和原公式:rtSum[i] = sum(nums[0]...nums[i]) ;

OK,我们先用正常思路去写这道题:

非常的简单,但是,如果输入的值到达10^6以上,将会出现很多次不必要的重复运算,大大增加了时间复杂度,有什么办法可以解决这个问题呢?


没错,如果我们一开始,就把数列中所有的数(n)的前缀和(也就是从0+1+2+......+n)都算出来,后续在每一次查找【L,R】的和就可以用R的前缀和 - L的前缀和。就可以算出【L,R】中所有数的和!

想法非常好,接下来,我们来实现它的基本操作。


代码+注释:

这便是前缀和的基本实现方式

接下来,返回这道题:

代码+注释:


答案如下:

每日金句:

           不飞则已,一飞冲天;不鸣则已,一鸣惊人。——《韩非子》

           任何成功,都是厚积薄发,多年苦修换来的,不怕走得慢,只怕不开始。

有兴趣的可以加我,一起做做题,我们一起进步!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值