Префиксные суммы
Равное количество 0 и 1
Найти самый длинный подмассив с равным количеством 0 и 1
Постановка задачи
Описание (LeetCode)
Дан бинарный массив nums. Нужно вернуть длину самого длинного непрерывного
подмассива, в котором количество 0 равно количеству 1.
Пример 1:
nums = [0, 1]
Результат:
2
Пояснение:
Подмассив [0, 1] содержит один 0 и одну 1.
Пример 2:
nums = [0, 1, 0]
Результат:
2
Пояснение:
Самые длинные подходящие подмассивы - [0, 1] и [1, 0].
Ограничения:
1 <= nums.length <= 10⁵nums[i]равен0или1
Решение
Задача выглядит как обычный перебор подмассивов: взять каждую левую границу,
затем каждую правую границу и посчитать количество нулей и единиц. Такой подход
работает, но он слишком медленный. Подмассивов в массиве O(n²), а ограничение
10⁵ сразу говорит нам, что нужен линейный алгоритм.
Подумайте немного, каким образом мы могли бы использовать префиксные суммы для
решения. Нам нужно быстро определять, что подмассив содержит одинаковое
количество нулей и единиц. Мы уже знаем, что префиксный массив позволяет за
O(1) получать сумму на любом подмассиве. Значит, префиксные суммы хорошо
подходят и для этой задачи.
Перейдите на Premium, чтобы продолжить
Разблокируйте доступ к этой статье и всем остальным материалам с NowInterview Premium
Перейти на Premium