题目
一个数组切两刀, 有三段
每段总和相等
解析
先确定第三段起点。
再通过枚举第三段起点之前 可切一刀的次数。
pre[0] = a[0]
pre[i] = pre[i - 1] + a[i]
代码
# 索引从1开始到n结束
for i in range(1, n): #range的末尾不包括末尾本身
# 开始判断能否在中间,必然不可能从num[0]开始
# 如果presun[i] = 第二份的开始 |--a--b--c
# 即可初步判断左侧和等于=中间和
if presum[i] == b:
count += 1
res = 0
# 但也有中间就是右侧和的可能 故开始第二次判断
# 从右往左判断
for i in range(1, n - 1):
if presum[i] == b:
# 如果由右往左出现情况,即可判断非三等分集和内和相等,故count - 1
count -= 1
# 左侧之前的累加和 = 中间和 既可以三等分,故res +=count 返回结果
if presum[i] == a:
res += count
print(res)
每日一题结束。
今天这道题我多做几遍,明天再抽出点时间做一遍,不信我不会。