Here are my 5 cents.
It will be easier to understand if we denote the position explicitly in the
iteration.
Let g_k[x] be the longest continuous `x` ending at position k, (exactly, not
at most) one change has been made.
Let f_k[x] represent the longest continous `x` ending at position k, no
change has been made.
Then we have the following iterative equations.
Update changed
g_{k+1} [x] = g_k [x] + 1
g_{k+1} [1-x] = f_k [1-x] + 1
Update unchanged
f_{k+1} [x] = f_k[x] + 1
f_{k+1} [1-x] = 0
----------------------------------------------
The corresponding code is:
int maxConsecNumChangeOne(vector &A) {
vector f(2, 0), g(2, -1);
int maxL = 0;
for (int x : A) {
g[x]++;
g[1-x] = f[1-x] + 1;
f[x]++;
f[1-x] = 0;
maxL = max(maxL, g[x]);
}
return maxL;
}
Welcome to point it out if you find any bug in the code.