3101 - Count Alternating Subarrays
problem
You are given a binary array nums.
We call a subarray alternating if no two adjacent elements in the subarray have the same value.
Return the number of alternating subarrays in nums.
Example 1:
Input: nums = [0,1,1,1]
Output: 5
Explanation:
The following subarrays are alternating: [0], [1], [1], [1], and [0,1].
Example 2:
Input: nums = [1,0,1,0]
Output: 10
Explanation:
Every subarray of the array is alternating. There are 10 possible subarrays that we can choose.
Constraints:
1 <= nums.length <= 105nums[i]is either0or1.
submission
impl Solution {
// we split the whole array into N alternating subarray
// partitions, assume the length of a partition is len,
// it contribute 1+2+3+...+len = (len + 1) * len / 2
// to the final answer
pub fn count_alternating_subarrays(nums: Vec<i32>) -> i64 {
nums.chunk_by(|a, b| a != b)
.map(|chunk| (chunk.len() * (chunk.len() + 1) / 2) as i64)
.sum()
}
}