二分法 + 哨兵
var waysToSplit = function(nums) {
const sumArr = [0], len = nums.length;
for(let i = 1; i <= len; i ++) {
sumArr[i] = nums[i - 1] + sumArr[i - 1]
}
let count = 0, mod = 10**9+7;
for(let i = 1, l = 2, r = 2; i <= len - 1; i ++) {
l = Math.max(l, i + 1), r = Math.max(r, i + 1)
while(r <= len - 1 && sumArr[len] - sumArr[r] >= sumArr[r] - sumArr[i]) {
r ++
}
while(l <= len - 1 && sumArr[l] - sumArr[i] < sumArr[i]) {
l ++
}
if (l <= r) {
count += r - l;
}
}
return count % mod
};
时间复杂度
空间复杂度