Нахождение максимальной длины подряд идущих элементов заданного числа в массиве

Один проход хранит длину текущей серии и максимальную длину. При другом значении текущий счётчик сбрасывается; для пустого массива или отсутствующего 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.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее