3432. Count Partitions with Even Sum Difference
Description
You are given an integer array nums of length n.
A partition is defined as an index i where 0 <= i < n - 1, splitting the array into two non-empty subarrays such that:
- Left subarray contains indices
[0, i]. - Right subarray contains indices
[i + 1, n - 1].
Return the number of partitions where the difference between the sum of the left and right subarrays is even.
Example 1:
Input: nums = [10,10,3,7,6]
Output: 4
Explanation:
The 4 partitions are:
[10],[10, 3, 7, 6]with a sum difference of10 - 26 = -16, which is even.[10, 10],[3, 7, 6]with a sum difference of20 - 16 = 4, which is even.[10, 10, 3],[7, 6]with a sum difference of23 - 13 = 10, which is even.[10, 10, 3, 7],[6]with a sum difference of30 - 6 = 24, which is even.
Example 2:
Input: nums = [1,2,2]
Output: 0
Explanation:
No partition results in an even sum difference.
Example 3:
Input: nums = [2,4,6,8]
Output: 3
Explanation:
All partitions result in an even sum difference.
Constraints:
2 <= n == nums.length <= 1001 <= nums[i] <= 100
Solutions
Solution 1: Prefix Sum
Thinking
We count cuts whose left and right sums differ by an even number. The parity of the difference is determined by the two running sums, so the whole array need not be rescanned.
\(l-r\) is even iff \(l\) and \(r\) have the same parity. Since \(l-r=2l-\textit{total}\), we can just maintain \(l\) and \(r\) while moving the cut.
Shift each of the first \(n-1\) elements from \(r\) into \(l\) and count the cuts with \((l-r)\bmod 2=0\).
We use two variables \(l\) and \(r\) to represent the sum of the left subarray and the right subarray, respectively. Initially, \(l = 0\) and \(r = \sum_{i=0}^{n-1} \textit{nums}[i]\).
Next, we traverse the first \(n - 1\) elements. Each time, we add the current element to the left subarray and subtract it from the right subarray. Then, we check if \(l - r\) is even. If it is, we increment the answer by one.
Finally, we return the answer.
The time complexity is \(O(n)\), where \(n\) is the length of the array \(\textit{nums}\). The space complexity is \(O(1)\).
1 2 3 4 5 6 7 8 9 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
1 2 3 4 5 6 7 8 9 10 11 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |