跳至主要內容

Leetcode 57. Insert Interval

You are given an array of non-overlapping intervals intervals where intervals[i] = [starti, endi] represent the start and the end of the ith interval and intervals is sorted in ascending order by starti. You are also given an interval newInterval = [start, end] that represents the start and end of another interval.

Insert newInterval into intervals such that intervals is still sorted in ascending order by starti and intervals still does not have any overlapping intervals (merge overlapping intervals if necessary).

Return intervals after the insertion.

Example 1:Input: intervals = [[1,3],[6,9]], newInterval = [2,5] Output: [[1,5],[6,9]]

Example 2:Input: intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8] Output: [[1,2],[3,10],[12,16]] Explanation: Because the new interval [4,8] overlaps with [3,5],[6,7],[8,10].

Constraints:

  • 0 <= intervals.length <= 104
  • intervals[i].length == 2
  • 0 <= starti <= endi <= 105
  • intervals is sorted by starti in ascending order.
  • newInterval.length == 2
  • 0 <= start <= end <= 105

The logic is easy, just go through each interval and check if the newInterval has overlapped.

I use a flag to check, but I think the code can be even cleaner.

class Solution:
    def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:
        result = []
        inserted = False

        overlap_start = newInterval[0]
        overlap_end = newInterval[1]
        
        for start, end in intervals:
            if end < overlap_start:
                result.append([start, end])
            elif start > overlap_end:
                if not inserted:
                    result.append([overlap_start, overlap_end])
                    inserted = True
                
                result.append([start, end])
            else:
                overlap_start = min(start, overlap_start)
                overlap_end = max(end, overlap_end)

                if inserted:
                    result[-1][0] = overlap_start
                    result[-1][1] = overlap_end
                else:
                    result.append([overlap_start, overlap_end])
                    inserted = True
        
        if not inserted:
            result.append([overlap_start, overlap_end])
        
        return result
分類:IntervalsLeetcode

搶先發佈留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

由 Compete Themes 設計的 Author 佈景主題