Skip to content

3206. Alternating Groups I

There is a circle of red and blue tiles. You are given an array of integers colors. The color of tile i is represented by colors[i]:

  • colors[i] == 0 means that tile i is red.
  • colors[i] == 1 means that tile i is blue.

Every 3 contiguous tiles in the circle with alternating colors (the middle tile has a different color from its left and right tiles) is called an alternating group.

Return the number of alternating groups.

Note that since colors represents a circle, the first and the last tiles are considered to be next to each other.

Example 1:

Input: colors = [1,1,1]

Output: 0

Explanation:

img

Example 2:

Input: colors = [0,1,0,0,1]

Output: 3

Explanation:

img

Alternating groups:

imgimgimg

Constraints:

  • 3 <= colors.length <= 100
  • 0 <= colors[i] <= 1
class Solution {
    public int numberOfAlternatingGroups(int[] colors) {
        // base case 
        if (colors.length <= 1){
            return 0;
        }

        int fast = 1;
        int slow = colors.length -1;
        int cur = 0;

        int result = 0;
        if (colors[cur] != colors[fast] && colors[cur] != colors[slow]){
            result++;
            cur++;
            fast++;
            slow = 0;
        }else{
            cur++;
            fast++;
            slow = 0;
        }

        while(cur < colors.length){
            if (colors[cur] != colors[fast] && colors[cur] != colors[slow]){
                result++;

            }
            cur++;
            fast++;
            slow++;

            if (cur == colors.length - 1){
                fast = 0;
            }
        }

        return result;
    }
}