1
# Runtime: 3346 ms (Top 89.52%) | Memory: 46.9 MB (Top 30.64%)3
def waysToPartition(self, nums: List[int], k: int) -> int:4
prefix_sums = list(accumulate(nums))5
total_sum = prefix_sums[-1]8
best = prefix_sums[:-1].count(total_sum // 2) # If no change10
after_counts = Counter(11
total_sum - 2 * prefix_sum for prefix_sum in prefix_sums[:-1]13
before_counts = Counter()15
best = max(best, after_counts[k - nums[0]]) # If we change first num17
for prefix, x in zip(prefix_sums, nums[1:]):18
gap = total_sum - 2 * prefix19
after_counts[gap] -= 120
before_counts[gap] += 122
best = max(best, after_counts[k - x] + before_counts[x - k])