Постановка задачи :

Вам дан массив/список ARR длины N, состоящий только из 0 и 1. Ваша задача — найти количество подмассивов (непустых), в которых количество нулей и единиц равно.

Пример ввода:

7
1 0 0 1 0 1 1

Пример вывода:

8

Объяснение примера тестового примера:

Имеется 8 таких подмассивов с диапазоном индексов [0, 1], [2, 3], [0, 3], [3, 4], [4, 5], [2, 5], [0, 5], [1, 6].

Подход :

МЕТОД КУМУЛЯТИВНОЙ СУММЫ

Если мы рассмотрим каждый «0» как -1, то подмассив, содержащий равные 0 и 1, даст сумму 0. Таким образом, мы можем использовать кумулятивную сумму для подсчета эти подмассивы с суммой 0 легко.

Идея основана на том факте, что если совокупная сумма снова появится в массиве, то подмассив между этими двумя вхождениями накопленной суммы будет иметь сумму из 0.

Например-
Учитывая ARR = [1, 1, 1, 0, 0, 1]

Совокупная сумма = [1, 2, 3, 2, 1, 2]

Здесь один из требуемых подмассивов имеет индекс range[1, 4]. Мы видим, что 1 снова появляется в кумулятивной сумме с индексом 4 (ранее с индексом 0). Следовательно, подмассив между индексом 0 (исключительно) и индексом 4 (включительно) является одним из подмассивов с равными 0 и 1.

Алгоритм:

Временная сложность: O(N)
Пространственная сложность: O(N)

Код :

Спасибо за чтение

Placewit воспитывает лучших инженеров, предоставляя интерактивные занятия в классе и помогая им развивать свои навыки и попадать в замечательные компании.

Узнайте больше на Placewit. Следите за нами в Instagram и Facebook для ежедневного обучения.