Учитывая массив положительных и отрицательных чисел, найдите, есть ли подмассив (размером не менее одного) с 0 суммой.
Примеры :
Input: {4, 2, -3, 1, 6} Output: true There is a subarray with zero sum from index 1 to 3. Input: {4, 2, 0, 1, 6} Output: true There is a subarray with zero sum from index 2 to 2. Input: {-3, 2, 3, 1, 6} Output: false There is no subarray with zero sum.
Простое решение состоит в том, чтобы рассмотреть все подмассивы один за другим и проверить сумму каждого подмассива. Мы можем запустить два цикла: внешний цикл выбирает начальную точку i, а внутренний цикл пробует все подмассивы, начиная с i (см. Это для реализации). Временная сложность этого метода составляет O (n 2 ).
Мы также можем использовать хеширование . Идея состоит в том, чтобы перебрать массив и для каждого элемента arr [i] вычислить сумму элементов от 0 до i (это можно сделать просто как sum + = arr [i]). Если текущая сумма была замечена ранее, то существует массив с нулевой суммой. Хеширование используется для хранения значений суммы, чтобы мы могли быстро сохранить сумму и выяснить, видна ли текущая сумма раньше или нет.
Пример :
arr[] = {1, 4, -2, -2, 5, -4, 3} If we consider all prefix sums, we can notice that there is a subarray with 0 sum when : 1) Either a prefix sum repeats or 2) Or prefix sum becomes 0. Prefix sums for above array are: 1, 5, 3, 1, 6, 2, 5 Since prefix sum 1 repeats, we have a subarray with 0 sum.
Ниже приводится реализация вышеуказанного подхода.
|
Джава
|
python3
|
C #
|
Выход :
No Such Sub Array Exists!
Сложность по времени этого решения можно рассматривать как O (n) в предположении, что у нас есть хорошая функция хеширования, которая позволяет операции вставки и извлечения за время O (1).
Упражнение:
Расширьте вышеприведенную программу для печати начальных и конечных индексов всех подмассивов с 0 суммой.
Эта статья предоставлена Чираг Гупта . Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме
Рекомендуемые посты:
- Найти длину наибольшего подмассива с 0 суммой
- Найти подмассив, сумма которого делится на размер массива
- Найти подмассив с заданной суммой | Набор 2 (Обрабатывает отрицательные числа)
- Максимальная сумма подмассива по модулю м
- Самый длинный подмассив с максимальной суммой
- Самый длинный подмассив только с одним значением больше k
- Максимальная сумма подмассива в O (n) с использованием префиксной суммы
- Самый длинный подмассив с суммой, кратной k
- Подмассив, абсолютная сумма которого ближе всего к K
- Самый большой подмассив, имеющий сумму больше k
- Самая большая сумма смежных Subarray
- Подмассив без парной суммы, делимой на K
- Самый большой подмассив с равным числом 0 и 1
- Максимальная сумма подмассива такая, что начальное и конечное значения совпадают
- Наименьший подмассив с k различными числами
0.00 (0%) 0 votes