编号 | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
a | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
b | 10 | 11 | 12 | 13 |
现在要从a数组中截取b数组知道b的和1000000次,而且不能够直接记下b数组的值,要一次一次算,怎么快速求?
这样看也许看不出什么,但是我再画一幅图你就明白了
编号 | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
c | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | ~ | ~ | ~ | ~ |
d | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ~ | ~ | ~ | ~ | ~ | ~ | ~ | ~ |
可见c-d即为b
也就是
(1+2+…+13)-(1+2+…+9)
好,下面我来说一下怎么做
先把
sum[1]=1,
sum[2]=1+2,
sum[3]=1+2+3
…
sum[17]=1+2+…+17
所有从1开始依次向后加的值都算出来
想要求区间和(n-m)的和,只要用sum[m]-sum[n]就可以了