【力扣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
思路:
- 不存在的条件
- 这道题目其实找的是所有区间里的交集,那么这些区间的在数组中的先后顺序其实就无所谓
- 先用每一个一位数组的第一个值排序,目的是找到最开始的起点
sorted(array,key=lambda x:x[0])
- 然后就是如何判断两个区间有交集?
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("这两个区间没有交集")
这道题写了好久,但是收获还是有的,哈哈