Dado un conjunto de intervalos, combine todos los intervalos superpuestos.
Ejemplo 1:
Entrada: [[1,3], [2,6], [8,10], [15,18]]
Salida: [[1,6], [8,10], [15,18]]
Explicación: El intervalo [1,3] y [2,6] se superponen y los fusionan en [1,6].
Ejemplo 2:
Entrada: [[1,4], [4,5]]
Salida: [[1,5]]
Explicación: Los intervalos [1,4] y [4,5] pueden considerarse intervalos superpuestos.
Fuente:
enlace de LeetCode : https://leetcode-cn.com/problems/merge-intervals Los
derechos de autor pertenecen a la red de deducción. Comuníquese con la autorización oficial para la reimpresión comercial e indique la fuente de la reimpresión no comercial.
Idea: ordene por el punto de inicio del intervalo de búsqueda para obtener una lista de intervalos ordenados y luego combine. Después de ordenar, solo hay tres casos de fusión: inclusión, intersección y separación. Es suficiente tratar las tres situaciones por separado: cada vez que se procesen dos secciones adyacentes, la nueva sección obtenida principalmente también se debe incluir en la siguiente comparación.
Nota: El tipo de lista de Python se ordena por timsort de forma predeterminada. El principio de realización interna de la función de clasificación de Python
class Solution:
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
if intervals == []:
return []
# 区间排序
intervals.sort()
# print(intervals)
ans = [intervals[0]] # 加入第一个区间
i = 1
while i < len(intervals):
# 每次比较最后一个加入的区间和当前遍历区间的关系:
if ans[-1][-1] >= intervals[i][-1]:
pass
elif ans[-1][-1] >= intervals[i][0]:
t = ans.pop()
ans.append([t[0], intervals[i][-1]])
else:
ans.append(intervals[i])
i += 1
return ans