for文での和
例として、[3,6)の和をとるコードを書いてみると、以下のようになります。
a = [11, 31, 83, 25, 26, 94, 101]
s = 0
for i in range(3, 6):
s += a[i]
print(s)
実行結果
145
累積和での和
累積和でも同様に書いてみます。
以下の記事を参考にして、先頭に0を追加しています。
累積和を何も考えずに書けるようにする! - Qiita
0. はじめに最近では AtCoder がコーディング面接の文脈でも有効なものとしての認識が広まってきています。AtCoder の登竜門といわれる水色を目指すにあたって多くの方が「勉強した」と報告…
a = [11, 31, 83, 25, 26, 94, 101]
acc = [0] + list(itertools.accumulate(a))
print(acc[6]-acc[3])
実行結果
145
for文と累積和の対応
上記のように累積和をとるようにすると、for文のrange(i,j)とacc[j]-acc[i]が等しくなります。
つまり、以下のコードがエラーなく実行できます。
a = [11, 31, 83, 25, 26, 94, 101]
acc = [0] + list(itertools.accumulate(a))
for i in range(len(a)):
for j in range(i, len(a)):
s = 0
for k in range(i, j):
s += a[k]
assert s == (acc[j] - acc[i])
これを覚えておくと、簡単に累積和が書けるようになるかもしれません。
累積和は配列のインデックスが訳分からなくなるので、何も考えずに書けるようになりたいです。
コメント