题目描述:
给你一个下标从 0 开始长度为 n
的整数数组 nums
。
如果以下描述为真,那么 nums
在下标 i
处有一个 合法的分割 :
- 前
i + 1
个元素的和 大于等于 剩下的n - i - 1
个元素的和。 - 下标
i
的右边 至少有一个 元素,也就是说下标i
满足0 <= i < n - 1
。
请你返回 nums
中的 合法分割 方案数。
代码思路:
- 初始化变量 :
acc
是一个列表,存储了数组nums
的前缀和(使用accumulate
函数计算)。ans
用于存储满足条件的分割方式的数量,初始化为 0。
- 遍历数组 :
- 遍历数组
nums
的索引(除了最后一个元素),因为最后一个元素无法作为分割点(至少需要一个元素在分割点的右侧)。 - 在每次迭代中,检查当前前缀和
acc[i]
是否大于等于从数组末尾到当前位置的总和(acc[-1] - acc[i]
)。
- 遍历数组
代码实现:
class Solution:
def waysToSplitArray(self, nums: List[int]) -> int:
acc, ans = list(accumulate(nums)), 0
for i in range(len(nums)-1):
if acc[i] >= acc[-1] - acc[i]:
ans += 1
return ans