题目描述:
给你一个下标从 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)), 0for i in range(len(nums)-1):if acc[i] >= acc[-1] - acc[i]:ans += 1return ans