Insert Interval

Question

Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).

You may assume that the intervals were initially sorted according to their start times.

Example 1: Given intervals [1,3],[6,9], insert and merge [2,5] in as [1,5],[6,9].

Example 2: Given [1,2],[3,5],[6,7],[8,10],[12,16], insert and merge [4,9] in as [1,2],[3,10],[12,16].

This is because the new interval [4,9] overlaps with [3,5],[6,7],[8,10].

Tag

  • Array
  • Sort

Thought

Reference: https://discuss.leetcode.com/topic/16988/7-lines-3-easy-solutions

Split the sorted interval list according to the new interval and update the new interval according to the splitting result.

Code

# Definition for an interval.
# class Interval(object):
#     def __init__(self, s=0, e=0):
#         self.start = s
#         self.end = e

class Solution(object):
    def insert(self, intervals, newInterval):
        """
        :type intervals: List[Interval]
        :type newInterval: Interval
        :rtype: List[Interval]
        """
        s, e = newInterval.start, newInterval.end
        left = [item for item in intervals if item.end < s]
        right = [item for item in intervals if item.start > e]

        if left + right != intervals:
            s = min(s, intervals[len(left)].start)
            e = max(e, intervals[-1-len(right)].end)

        return left + [Interval(s, e)] + right

results matching ""

    No results matching ""