Сумма всех целых чисел в заданных N диапазонах

Опубликовано: 20 Сентября, 2022

Учитывая N диапазонов формы [L, R] , задача состоит в том, чтобы найти сумму всех целых чисел, которые лежат в любом из заданных диапазонов.

Примеры :

Input: arr[] = {{1, 5}, {3, 7}}, N = 2
Output: 28
Explanation: The set of integers that exist in one or more ranges is {1, 2, 3, 4, 5 , 6, 7}. Hence there sum is 28.

Input: ranges[] = {{-12, 15}, {3, 9}, {-5, -2}, {20, 25}, {16, 20}}
Output: 247

Подход: данная проблема может быть решена с помощью подхода, аналогичного проблеме слияния перекрывающихся интервалов. Ниже приведены шаги, которые необходимо выполнить:

  • Отсортируйте интервалы на основе возрастающего порядка L .
  • Поместите первый интервал в стек и для каждого интервала выполните следующие действия:
    • Если текущий интервал не перекрывается с вершиной стека, нажмите его.
    • Если текущий интервал перекрывается с вершиной стека, а правый конец текущего интервала больше, чем у вершины стека, обновите вершину стека со значением правого конца текущего интервала.
  • После обхода всех интервалов оставшийся стек содержит объединенные интервалы. Сумма объединенных интервалов может быть рассчитана по формуле суммы арифметической прогрессии, поскольку диапазон [L, R] образует ПД с общей разностью, равной 1 , и количеством элементов, равным R – L + 1 . Сумма равна ((L + R)*(R-L+1))/2.

Ниже приведена реализация вышеуказанного подхода:


Временная сложность: O (N * log N)
Вспомогательное пространство: O(1)