Начните с массива чисел, A, найдите самое длинное
непрерывный пробег некоторого числа N в A.
Псевдо C ...
MaxRun = 0 /* Longest run so far */
for (i = 0; i < length(A);) {
if A[i] = N {
/* Potential run of N's... */
/* Scan backward for first N in run */
for (j = i; j > 0 & A[j-1] = N; j--);
/* Scan forward to last N in run */
for (k = i; k < length(A)-1 & A[k+1] = N; k++);
/* Check to see if longer run found... */
if (k-j+1 > MaxRun) then MaxRun = k-j+1;
i = k /* jump i to last N found */
}
i = i + MaxRun + 1 /* Jump by longest run plus 1 */
}
MaxRun - это ответ
Идея состоит в том, что как только вы найдете непрерывную серию N, вы можете
прыгнуть вперед, по крайней мере, так далеко в массиве, прежде чем проверять
другой кандидат.
Этот алгоритм имеет возможное сублинейное время выполнения из-за коэффициента скачка. В худшем случае каждый A [i] будет проверен.