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