, . , . , . , .
, , 0..5 +4, , 0..5 , , 6..X. 0..5 -1, 0..5, . 6..6. , . C, :
static void findRange(const int *array, int *pStart, int *pEnd, int *pScore)
{
int start = 0;
int best = 0;
int i = 0;
int diff = 0;
int base = 0;
int bestStart = -1;
int bestEnd = -1;
for (i=0;i<N;i++)
base += array[i];
for (i=start=0;i<N;i++) {
if (array[i] == 0)
diff++;
else
diff--;
if (diff > best) {
bestStart = start;
bestEnd = i;
best = diff;
}
if (diff <= 0) {
start = i+1;
diff = 0;
}
}
*pStart = bestStart;
*pEnd = bestEnd;
*pScore = base + best;
}
Edit: , , , Kadane , 0 1 1 -1.