今日题目
https://leetcode.com/problems/number-of-ways-to-split-array/description/
思路
根据题意,我们需要计算 $sum(a[0] \space to\space a[i])$ 和 $sum(a[i+1]\space to\space a[n])$。 由于 $sum(a[0]\space to\space a[i + 1]) = sum(a[0]\space to\space a[i]) + a[i+1]$,且 $sum(a[i+1]\space to\space a[n]) = sum(a[0]\space to\space a[n]) - sum(a[0]\space to\space a[i])$。 因此,我们可以定义两个变量:$now$ 用于存储 $sum(a[0]\space to\space a[i])$,每次迭代加上 $a[i+1]$;$summ$ 用于存储 $sum(a[0]\space to\space a[n])$。
解题方法
这样,我们只需比较 $now$ 和 $summ - now$ 的大小关系,统计满足条件的下标 i 的数量即可。
复杂度分析
-
时间复杂度:$O(N)$,N 为序列长度。
-
空间复杂度:$O(1)$,仅需两个额外变量。
代码
class Solution:
def waysToSplitArray(self, nums: List[int]) -> int:
now,summ, ans = 0, 0, sum(nums)
for num in nums[:-1]:
now += num
if now >= summ - now:
ans += 1
return ans
