Один проход хранит длину текущей серии и максимальную длину. При другом значении текущий счётчик сбрасывается; для пустого массива или отсутствующего target ответ равен нулю.
Нахождение максимальной длины подряд идущих элементов заданного числа в массиве
Один проход хранит длину текущей серии и максимальную длину. При другом значении текущий счётчик сбрасывается; для пустого массива или отсутствующего target ответ равен нулю.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо реализовать функцию, которая вычисляет длину самой длинной непрерывной подпоследовательности, состоящей из заданного числа, в переданном векторе целых.
Пример: массив = [1, 2, 3, 3, 3, 1, 3, 3, 3, 3], искомое число = 3 → результат = 4
int find_max_streak(const std::vector<int>& arr, int target)
{
return 0;
}
Ответ
Один проход хранит длину текущей серии и максимальную длину. При другом значении текущий счётчик сбрасывается; для пустого массива или отсутствующего target ответ равен нулю.
Для результата, помещающегося в int:
int find_max_streak(const std::vector<int>& arr, int target) {
int current = 0, best = 0;
for (int value : arr) {
current = value == target ? current + 1 : 0;
if (current > best) best = current;
}
return best;
}
В примере максимальная серия из четырёх троек даёт 4. Время O(n), память O(1). Если вектор может содержать больше INT_MAX подряд идущих элементов, сигнатуру результата и счётчики нужно изменить на std::size_t.