1
var waysToSplit = function (nums) {
2
const mod = 1000000007;
3
const lastIndex = nums.length - 2;
4
const total = nums.reduce((sum, num) => sum + num);
5

6
let midLeftPtr = -1;
7
let midRightPtr = -1;
8

9
let leftSum = 0;
10
let midLeftSum = 0;
11
let midRightSum = 0;
12

13
let numWaysToSplit = 0;
14

15
for (let leftPtr = 0; leftPtr < nums.length; leftPtr++) {
16
leftSum += nums[leftPtr];
17
midLeftSum -= nums[leftPtr];
18
midRightSum -= nums[leftPtr];
19

20
// find the first index that satisfies the middle sum
21
// being greater than or equal to the left sum
22
while (
23
midLeftPtr <= lastIndex &&
24
(midLeftPtr <= leftPtr || midLeftSum < leftSum)
25
) {
26
midLeftPtr++;
27
midLeftSum += nums[midLeftPtr];
28
}
29

30
// find the first index that makes the middle sum greater than the right sum
31
while (
32
midRightPtr <= lastIndex &&
33
(midLeftPtr > midRightPtr || midRightSum <= total - midRightSum - leftSum)
34
) {
35
midRightPtr++;
36
midRightSum += nums[midRightPtr];
37
}
38
numWaysToSplit = (numWaysToSplit + midRightPtr - midLeftPtr) % mod;
39
}
40
return numWaysToSplit;
41
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0