ZhangZhihui's Blog  

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

 

My Solution:

class Solution(object):
    def merge(self, intervals):
        """
        :type intervals: List[List[int]]
        :rtype: List[List[int]]
        """
        
        n = len(intervals)
        if n == 1:
            return intervals
        
        intervals.sort()
        
        left = 0
        right = 1
        curr_interval = intervals[left]
        res = []

        while right < n:
            next_interval = intervals[right]

            # left overlap
            if next_interval[0] <= curr_interval[0] <= next_interval[1] <= curr_interval[1]:
                curr_interval = [next_interval[0], curr_interval[1]]
            # right overlap
            elif curr_interval[0] <= next_interval[0] <= curr_interval[1] <= next_interval[1]:
                curr_interval = [curr_interval[0], next_interval[1]]
            # contained
            elif curr_interval[0] <= next_interval[0] <= next_interval[1] <= curr_interval[1]:
                pass
            # contains
            elif next_interval[0] <= curr_interval[0] <= curr_interval[1] <= next_interval[1]:
                curr_interval = next_interval
            # not overlap
            else:
                res.append(curr_interval)
                left = right
                curr_interval = intervals[left]

            if left == n - 1 or right == n - 1:
                res.append(curr_interval)
            
            right += 1
        
        return res

 

 

posted on 2025-03-18 12:37  ZhangZhihuiAAA  阅读(8)  评论(0)    收藏  举报