【力扣100】56.合并区间

添加链接描述

class Solution:
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        # 队列,每次加进来两个元素:1.不包含:第一个元素出去,并放入result;2.包含:合并
        n=len(intervals)
        result=[]
        que=collections.deque()
        if n==0:
            return [[]]
        if n==1:
            return [intervals[0]]
        # 初始化
        intervals=sorted(intervals,key=lambda x:x[0])
        for i in intervals:
            if len(que)<2:
                que.append(i)
            if len(que)==2:
                start=max(que[0][0],que[1][0])
                end=min(que[0][1],que[1][1])
                left_border=min(que[0][0],que[1][0])
                right_border=max(que[0][1],que[1][1])
                if start<=end:
                    que.append([left_border,right_border])
                    que.popleft()
                    que.popleft()
                else:
                    result.append(que.popleft())

               
        while que:
            result.append(que.popleft())
        return result       

思路:

  1. 不存在的条件
  2. 这道题目其实找的是所有区间里的交集,那么这些区间的在数组中的先后顺序其实就无所谓
  3. 先用每一个一位数组的第一个值排序,目的是找到最开始的起点sorted(array,key=lambda x:x[0])
  4. 然后就是如何判断两个区间有交集?
interval1 = [3, 7]
interval2 = [5, 10]

# 获取交集的起始点和结束点
start = max(interval1[0], interval2[0])
end = min(interval1[1], interval2[1])

# 检查是否存在交集
if start <= end:
    intersection = [start, end]
    print("两个区间的交集为:", intersection)
else:
    print("这两个区间没有交集")

这道题写了好久,但是收获还是有的,哈哈