Как подсчитать количество заполненных нулями подмассивов в TypeScript
При работе с массивами часто возникают проблемы, требующие подсчета количества подмассивов, соответствующих определенным критериям. В этой статье мы обсудим решение TypeScript для подсчета количества подмассивов, заполненных 0 в целочисленном массиве. Мы предоставим пошаговое объяснение кода, а также его временные и пространственные сложности.
Постановка задачи
Учитывая целочисленный массив nums
, нам нужно подсчитать количество подмассивов, заполненных 0. Подмассив — это непрерывная непустая последовательность элементов в массиве.
Пример
Предположим, nums = [1,3,0,0,2,0,0,4]
. Тогда вывод должен быть 6
. Существует 4 вхождения [0] в качестве подмассива. Есть 2 вхождения [0,0] в качестве подмассива. Подмассив размером более 2, заполненный 0, не встречается. Поэтому мы возвращаем 6.
Решение
Мы можем решить эту проблему, пройдя заданный массив nums
и проверив любые последовательные 0
. Мы ведем подсчет всех таких подмассивов и возвращаем счетчик в конце.
Вот код TypeScript для того же самого:
function zeroFilledSubarray(nums: number[]): number { // Initialize the count for the number of subarrays that have a sum of zero let count = 0; // Initialize the count for the number of consecutive zeros in a subarray let currentCount = 0; // Iterate through the array for (let i = 0; i < nums.length; i++) { // If the current element is zero if (nums[i] === 0) { // Increment the current count currentCount++; // Add the current count to the total count count += currentCount; // If the current element is not zero } else { // Reset the current count to zero currentCount = 0; } } // Return the total count return count; }
Разберем код построчно:
- Мы определяем функцию
zeroFilledSubarray
, которая принимает массив целых чиселnums
и возвращает число. - Мы инициализируем две переменные
count
иcurrentCount
равными 0. - Мы перебираем массив
nums
, используя циклfor
. - Если текущий элемент
nums
равен 0, мы увеличиваемcurrentCount
на 1 и добавляем его кcount
. Это потому, что мы нашли подмассив последовательных нулей, и нам нужно добавить количество этого подмассива к общему количеству. - Если текущий элемент
nums
не равен 0, мы сбрасываемcurrentCount
в 0. Это потому, что если мы встретим ненулевой элемент, текущий подмассив последовательных нулей будет нарушен. - Наконец, мы возвращаем количество всех подмассивов, заполненных
0
.
Сложность времени
Временная сложность приведенной выше функции равна O(n)
, где n
— длина заданного массива nums
. Это потому, что мы проходим весь массив только один раз.
Космическая сложность
Объемная сложность приведенной выше функции составляет O(1)
, поскольку мы не используем никаких дополнительных структур данных для вычислений.
Выполнение
Давайте посмотрим на некоторые детали реализации приведенного выше кода:
Машинопись
TypeScript — это надмножество JavaScript, которое добавляет в язык необязательную статическую типизацию и другие функции. Он набирает популярность среди разработчиков из-за безопасности типов, улучшенного инструментария и лучшей организации кода.
В приведенном выше коде мы определяем функцию zeroFilledSubarray
с помощью TypeScript. Мы указываем тип входного параметра nums
как массив целых чисел, а возвращаемый тип функции как число.
Перебор массива
В приведенном выше коде мы используем цикл for
для перебора заданного массива nums
. Мы начинаем цикл с индекса 0 и продолжаем до конца массива nums
, используя свойство длины массива.
Подсчет подмассивов
Чтобы подсчитать количество подмассивов, заполненных 0, мы используем две переменные count
и currentCount
. Мы инициализируем обе эти переменные равными 0. Мы используем currentCount
для отслеживания количества последовательных нулей, с которыми мы столкнулись до сих пор.
Если текущий элемент nums
равен 0, мы увеличиваем currentCount
на 1 и добавляем его к count
. Это потому, что мы нашли подмассив последовательных нулей, и нам нужно добавить количество этого подмассива к общему количеству.
Если текущий элемент nums
не равен 0, мы сбрасываем currentCount
в 0. Это потому, что если мы встретим ненулевой элемент, текущий подмассив последовательных нулей будет нарушен. Нам нужно снова начать отсчет со следующей позиции.
Возврат счета
Наконец, мы возвращаем значение count
. Это общее количество всех подмассивов, заполненных 0 в данном массиве nums
.
Рекомендации
Если вам интересно узнать больше о темах, затронутых в этой статье, ознакомьтесь со следующими ресурсами:
Заключение
В этой статье мы обсудили решение TypeScript для подсчета количества подмассивов, заполненных 0 в целочисленном массиве. Мы объяснили код построчно и указали его временные и пространственные сложности. Мы также рассмотрели некоторые детали реализации кода, включая TypeScript, перебор массива и подсчет подмассивов. Мы надеемся, что вы нашли эту статью познавательной и полезной.