题目描述:
https://leetcode.cn/problems/alternating-groups-i/description/?envType=daily-question&envId=2024-11-26
 
 题目示例:
 
 
解题思路
思路一:
1.如果color.size()小于等于2,则构不成环,直接返回结果0
 2.当color.size()大于等于3时,在数组color最后插入color[0]和color[1],构成一个虚拟环
 3.当color[i]==color[i+2]并且color[i]!=color[i+1]时,说明满足交替条件
 4.代码如下:
class Solution {
public:
    int numberOfAlternatingGroups(vector<int>& colors) {
        int res = 0;
        int length = colors.size();
        if(length <=2){
            return res;
        }
        int num1 = colors[0];
        int num2 = colors[1];
        colors.push_back(num1);
        colors.push_back(num2);
        for(int i=0; i<length; i++){
            if(colors[i] == colors [i+2] && colors[i] != colors[i+1]){
                res +=1;
            }
        }
        return res;
    }
};
思路二(优化)
思路一的缺点:
我们需要对数组
color末尾追加元素,由于vector容器底层扩容机制的存在,当元素数量达到color容量时,vector会重新开辟一块空间,将其中的元素复制到新开辟的空间中去,这样会浪费时间和空间。因此处理好边界条件,在不进行追加元素的情况下进行条件判断,可提升程序执行效率。
class Solution {
public:
    int numberOfAlternatingGroups(vector<int>& colors) {
        int n = colors.size();
        int res = 0;
        for(int i=0; i<n; i++){
            if(colors[(i-1+n)%n] != colors[i] && colors[(i+1+n)%n] != colors[i]){
                res+=1;
            }
        }
        return res;
    }
};



















