题目描述:
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;}
};