DEV Community

Abhishek Chaudhary
Abhishek Chaudhary

Posted on

1

Merge Intervals

Given an array of intervals where intervals[i] = [starti, endi], merge all overlapping intervals, and return an array of the non-overlapping intervals that cover all the intervals in the input.

Example 1:

Input: intervals = [[1,3],[2,6],[8,10],[15,18]]
Output: [[1,6],[8,10],[15,18]]
Explanation: Since intervals [1,3] and [2,6] overlap, merge them into [1,6].

Example 2:

Input: intervals = [[1,4],[4,5]]
Output: [[1,5]]
Explanation: Intervals [1,4] and [4,5] are considered overlapping.

Constraints:

  • 1 <= intervals.length <= 104
  • intervals[i].length == 2
  • 0 <= starti <= endi <= 104

SOLUTION:

import bisect

class Solution:
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        points = []
        for l, r in intervals:
            bisect.insort(points, (l, 1))
            bisect.insort(points, (r + 1, -1))
        p = 0
        prev = None
        intervals = []
        for x, diff in points:
            p += diff
            if p == 0 and prev != None:
                if diff == 1:
                    intervals.append([prev, x])
                else:
                    intervals.append([prev, x - 1])
            if p == 1 and p - diff == 0:
                prev = x
        return intervals
Enter fullscreen mode Exit fullscreen mode

Speedy emails, satisfied customers

Postmark Image

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

AWS GenAI LIVE!

GenAI LIVE! is a dynamic live-streamed show exploring how AWS and our partners are helping organizations unlock real value with generative AI.

Tune in to the full event

DEV is partnering to bring live events to the community. Join us or dismiss this billboard if you're not interested. ❤️