LeetCode-in-Java

3101. Count Alternating Subarrays

Medium

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:

Solution

public class Solution {
    public long countAlternatingSubarrays(int[] nums) {
        long count = 0;
        long length;
        int start = 0;
        int end = 1;
        while (end < nums.length) {
            if (nums[end] != nums[end - 1]) {
                end++;
            } else {
                length = end - (long) start;
                count += (length * (length + 1)) / 2;
                start = end;
                end++;
            }
        }
        length = end - (long) start;
        count += (length * (length + 1)) / 2;
        return count;
    }
}