Write a function called sumIntervals/sum_intervals() that accepts an array of intervals, and returns the sum of all the interval lengths. Overlapping intervals should only be counted once.
Intervals
Intervals are represented by a pair of integers in the form of an array. The first value of the interval will always be less than the second value. Interval example: [1, 5] is an interval from 1 to 5. The length of this interval is 4.
Overlapping Intervals
List containing overlapping intervals:
[
[1,4],
[7, 10],
[3, 5]
]
The sum of the lengths of these intervals is 7. Since [1, 4] and [3, 5] overlap, we can treat the interval as [1, 5], which has a length of 4.
def sum_of_intervals(intervals):
for _ in range(3):
valid_intervals = [list(intervals[0])]
for n, itrl in enumerate(intervals[1:]):
is_sub_interval = False
for k, v_itrl in enumerate(valid_intervals):
# [ ( ] )
if v_itrl[0] <= itrl[0] and v_itrl[1] >= itrl[0]:
is_sub_interval = True
if itrl[1] > v_itrl[1]:
valid_intervals[k][1] = itrl[1]
# ( [ ) ]
elif v_itrl[1] >= itrl[1] and v_itrl[0] <= itrl[1]:
is_sub_interval = True
if itrl[0] < v_itrl[0]:
valid_intervals[k][0] = itrl[0]
if not is_sub_interval:
valid_intervals.append(list(itrl))
intervals=list(reversed(valid_intervals))
return sum(x[1]-x[0] for x in valid_intervals)