https://leetcode.com/problems/merge-intervals/

把 intervals 裡面有重疊的 interval 合併,回傳最後結果

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.


May 19, 2024

class Solution:
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        if len(intervals) == 1:
            return intervals

        sorted_intervals = sorted(intervals, key=lambda x: x[0])
        result = [sorted_intervals[0]]

        for i in range(1, len(sorted_intervals)):
            curr_interval = sorted_intervals[i]
            if self.is_overlap(result[-1], curr_interval):
                merged_interval = self.merge_interval(result[-1], curr_interval)
                result[-1] = merged_interval
            else:
                result.append(curr_interval)
        
        return result

    """
    s---e
          s---e

    s---e
      s---e
    """
    def is_overlap(self, i1, i2):
        # 由於前面已經排序過,因此這裡就不檢查 i1, i2 位置了
        if i1[1] >= i2[0]:
            return True
        return False
    
    def merge_interval(self, i1, i2):
        # 由於前面已經排序過,因此這裡就不檢查 i1, i2 位置了
        if not self.is_overlap(i1, i2):
            raise Exception("non overlap")
        return [min(i1[0], i2[0]), max(i1[1], i2[1])]

November 28, 2023

class Solution:
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:

        if len(intervals) == 1:
            return intervals
        
        # sort by index[0] of each item
        sorted_intervals = sorted(intervals, key=lambda x: x[0]) 
        
        result = [sorted_intervals[0]]
        
        for i in range(1, len(sorted_intervals)):
            interval = sorted_intervals[i]
            
            if interval[0] > result[-1][1]:
                result.append(interval)
            elif interval[0] <= result[-1][1] and interval[1] > result[-1][1]:
                merged = [result[-1][0], interval[1]]
                result[-1] = merged

        return result

先把 intervals 排序,用每個item的第一個值來排

宣告一個result array,把排完的 intervals 第一個push進去