classSolution(object):defmerge(self, intervals):"""
:type intervals: List[List[int]]
:rtype: List[List[int]]
"""# 使用字典来记录是否处于区间之内
isIn ={}# 记录出现过的最大最小值
minNum =10000
maxNum =0for i inrange(len(intervals)):
left = intervals[i][0]
right = intervals[i][1]if left < minNum:
minNum = left
if right > maxNum:
maxNum = right
# 对于左右象限相等的特殊情况,只将left那一个点标记if left == right:if isIn.get(left,False)!=True:
isIn[left]=Trueelse:# 左右象限不相等的时候,将[left,right]之间的点# 以及标记点之间的中间位都做标记for j inrange(left, right):
isIn[j]=True
isIn[j+0.5]=True
isIn[right]=True
mergeResults =[]
i = minNum
while i <= maxNum:#寻找特殊节点,即左右值相同while isIn.get(i,False)==Trueand \
isIn.get(i+0.5,False)!=Trueand i <= maxNum:
mergeResults.append([i,i])
i = i +1# 寻找左节点while isIn.get(i,False)!=Trueand i < maxNum:
i = i +1# 当前的i存在于字典中,# 但需要判断寻找到的是不是特殊节点if isIn.get(i+0.5,False)==True:
left = i
# 寻找右节点while isIn.get(i,False)==Trueand \
isIn.get(i+0.5,False)==Trueand i < maxNum:
i = i +1
right = i
mergeResults.append([left, right])
i = i +1return mergeResults