Префиксные суммы

Равное количество 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