1524. Number of Sub-arrays With Odd Sum
Description
Given an array of integers arr
, return the number of subarrays with an odd sum.
Since the answer can be very large, return it modulo 109 + 7
.
Example 1:
Input: arr = [1,3,5] Output: 4 Explanation: All subarrays are [[1],[1,3],[1,3,5],[3],[3,5],[5]] All sub-arrays sum are [1,4,9,3,8,5]. Odd sums are [1,9,3,5] so the answer is 4.
Example 2:
Input: arr = [2,4,6] Output: 0 Explanation: All subarrays are [[2],[2,4],[2,4,6],[4],[4,6],[6]] All sub-arrays sum are [2,6,12,4,10,6]. All sub-arrays have even sum and the answer is 0.
Example 3:
Input: arr = [1,2,3,4,5,6,7] Output: 16
Constraints:
1 <= arr.length <= 105
1 <= arr[i] <= 100
Solutions
Solution 1: Prefix Sum + Counter
We define an array \(\textit{cnt}\) of length 2 as a counter, where \(\textit{cnt}[0]\) and \(\textit{cnt}[1]\) represent the number of subarrays with even and odd prefix sums, respectively. Initially, \(\textit{cnt}[0] = 1\) and \(\textit{cnt}[1] = 0\).
Next, we maintain the current prefix sum \(s\), initially \(s = 0\).
Traverse the array \(\textit{arr}\), for each element \(x\) encountered, add the value of \(x\) to \(s\), then based on the parity of \(s\), add the value of \(\textit{cnt}[s \mod 2 \oplus 1]\) to the answer, and then increment the value of \(\textit{cnt}[s \mod 2]\) by 1.
After the traversal, we get the answer. Note the modulo operation for the answer.
Time complexity is \(O(n)\), where \(n\) is the length of the array \(\textit{arr}\). Space complexity is \(O(1)\).
1 2 3 4 5 6 7 8 9 10 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
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 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|