2
// time - O(n), space - O(n)3
public int waysToPartition(int[] nums, int k) {6
int[] pref = new int[n];8
Map<Integer, Integer> count = new HashMap<>(); // contribution of prefixes without changing11
for (int i = 1; i < n - 1; i++) {12
pref[i] += pref[i - 1] + nums[i];13
count.put(pref[i], count.getOrDefault(pref[i], 0) + 1);18
n - 1]; // last step doesn't add into 'count' map, because we're trying to find at21
int sum = pref[n - 1];23
if (sum % 2 == 0) max = count.getOrDefault(sum / 2, 0); // max without changing25
Map<Integer, Integer> countPrev =26
new HashMap<>(); // contribution of prefixes before current step27
for (int i = 0; i < n; i++) {28
int diff = k - nums[i];29
int changedSum = sum + diff;30
if (changedSum % 2 == 0)34
count.getOrDefault(changedSum / 2 - diff, 0)35
+ countPrev.getOrDefault(changedSum / 2, 0));36
count.put(pref[i], count.getOrDefault(pref[i], 0) - 1);37
countPrev.put(pref[i], countPrev.getOrDefault(pref[i], 0) + 1);