看到环就考虑到0和n-1这种边界情况,我第一想法就是把这个环给拉成直线,即扩展colors数组,把0和1对应的值copy到n和n+1;即以下代码
class Solution {
public int numberOfAlternatingGroups(int[] colors) {
int n = colors.length;
int[] col = (int[])Arrays.copyOf(colors,n+2);
col[n] = colors[0];
col[n+1] = colors[1];
int l = 0;
boolean dis = false;
int ans =0;
for(int r = 1; r<n+2;++r){
if(col[r]!=col[l]){
if(!dis)
dis = true;
else ans++;
}else dis = false;
++l;
}
return ans;
}
}
但看了官方题解一个处理环很好的办法--------取mod
这样就能拿到边界值
class Solution {
public int numberOfAlternatingGroups(int[] colors) {
int n = colors.length;
int res = 0;
for(int i = 0;i<n;i++){
if(colors[i]!=colors[(i-1+n)%n] && colors[i] != colors[(i+1)%n]) {
res+=1;
}
}
return res;
}
}