Maximum Number of Ways to Partition an Array LeetCode solution in JavaScript

1
/**
2
* @param {number[]} nums
3
* @param {number} k
4
* @return {number}
5
*/
6
var waysToPartition = function (nums, k) {
7
let totalSum = nums.reduce((acc, curr) => acc + curr);
8
let left = 0;
9
let rightDiff = {};
10
let leftDiff = {};
11

12
for (let i = 0; i < nums.length - 1; i++) {
13
left += nums[i];
14
const right = totalSum - left;
15
if (rightDiff[left - right]) rightDiff[left - right]++;
16
else rightDiff[left - right] = 1;
17
}
18

19
let maxPartition = rightDiff[0] ? rightDiff[0] : 0;
20
left = 0;
21
for (let i = 0; i < nums.length; i++) {
22
left += nums[i];
23
let diff = k - nums[i];
24
const right = totalSum - left;
25
let leftVal = leftDiff[`${diff}`] ? leftDiff[`${diff}`] : 0;
26
let rightVal = rightDiff[`${-diff}`] ? rightDiff[`${-diff}`] : 0;
27

28
maxPartition = Math.max(maxPartition, leftVal + rightVal);
29
if (leftDiff[left - right]) leftDiff[left - right]++;
30
else leftDiff[left - right] = 1;
31

32
rightDiff[left - right]--;
33
}
34

35
return maxPartition;
36
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0