Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от -10000 до 10000 включительно. Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти наибольшее количество одинаковых элементов, расположенных подряд. Исходные данные объявлены так, как показано ниже на примерах для некоторых языков программирования. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных. В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Cython 0.20). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в приведённых фрагментах. Индексация элементов в массиве начинается с нуля.
23453
-335
335
5
0
0
0
-6
2
677
677
4
4
программа должна вывести
3
В переменной мы будем хранить наибольшее количество идущих подряд элементов массива. Так как наименьшая длина такой последовательности равна 1 (сам элемент), изначально приравняем
к единице.
Опишем кратко идею решения задачи: для каждого элемента массива мы будем подсчитывать, сколько до него идет подряд одинаковых чисел. После этого мы будем сравнивать получившееся количество с наибольшим количеством следующих друг за другом одинаковых элементов массива (с ) и обновим
, если это понадобится.
В мы будем хранить длину последовательности одинаковых чисел для элемента, который мы рассматриваем (сколько одинаковых чисел расположено до этого элемента, считая текущий элемент). Изначально приравняем
к единице (ведь последовательность одинаковых чисел будет состоять как минимум из текущего элемента).
Например, у нас есть такой массив: 1 1 1 0 0 0 0 4
Перед нулевым элементом массива нет никаких чисел, поэтому до него идет подряд 0 одинаковых чисел, .
, значит,
не меняем. Перед первым элементом
= 1 расположен равный ему
= 1, тогда теперь у нас есть два одинаковых элемента,
.
, тогда теперь
Перед вторым элементом расположен тоже элемент, равный ему, но мы уже знаем, что для предыдущего элемента
. Значит, увеличим
на единицу (добавив к последовательности одинаковых чисел второй элемент).
, тогда
. Так как следующий элемент уже не равен предыдущему, начнем рассматривать новую последовательность чисел. Приравняем
к 1 (теперь последовательность одинаковых чисел состоит из одного элемента, который мы сейчас рассматриваем). Следующий элемент
равен
, значит, увеличим значение
на 1.
оставляем таким же.
, значит, увеличим
еще на один.
, оставляем таким же. Наконец,
, увеличим
, ведь теперь последовательность одинаковых чисел равна четырем. Так как
. Следующий элемент
не равен
, для него
.
Обобщим наш алгоритм: для нулевого элемента . Для каждого следующего элемента мы проверяем, равен ли он предыдущему. Если да, мы увеличиваем
на 1, так как последовательность одинаковых элементов стала больше на один элемент и сравним
с максимумом
(если
). Если нет, мы только сравним
с максимумом
. После этого приравняем
снова к 1, потому что теперь рассматриваем новую последовательность одинаковых чисел. Вне цикла выведем
, в котором окажется длина максимальной последовательности одинаковых чисел.
Пример на (с комментариями):
//начнем с первого элемента массива, потому что для нулевого
.
//если текущий элемент не равен предыдущему,
= 1.
//обновляем максимум, если необходимо.