因为是入门,所以这篇文章只讲述了差分的原理
有这么一种题型,他让你每次在给定的区间内加上一个数,最后求最大值等,数据范围往往都很大。直接for循环肯定超时。所以这时候就要用到差分
差分原理
先有两个数组,一个是差分数组d,一个是前缀和数组s
如果我们想要把前缀和数组的l-r区间都加上一个数x,这里假设x=6,l=2,r=5,那么可以进行如下操作:
1.将d[l]+x,d[r+1]-x
0 1 2 3 4 5 6 7
d: 0 0 6 0 0 0 -6 0
这个时候观众大佬们可能还看不出什么,但如果将d进行前缀和呢?
2.s[i]=s[i-1]+d[i]
0 1 2 3 4 5 6 7
s: 0 0 6 6 6 6 0 0
当然,有多组区间只需要在d数组上修改,前缀和数组最后求就行
发现竟然达到了我们的需求,那么假设有n组区间,那么时间复杂度就是,明显比暴力
要小很多。
懂了这个,想必一些题大家就能做了吧
给大家推荐几道题练练手:
1499

被折叠的 条评论
为什么被折叠?



