115. Intervalo de fusión
Enlace del título
Fuente: LeetCode
Enlace: https://leetcode-cn.com/problems/merge-intervals
Descripción del título
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.
Mas dificil
Intervalo de superposición: el valor del intervalo derecho del intervalo actual es mayor que el valor del intervalo izquierdo del intervalo actual, que es el intervalo superpuesto.El valor del intervalo izquierdo del intervalo anterior del intervalo actual se toma como el intervalo izquierdo del intervalo de superposición, y el valor del intervalo frontal del intervalo actual se toma. El valor máximo del valor del intervalo correcto y el valor del intervalo correcto del intervalo actual se usa como el intervalo correcto del intervalo superpuesto.
Análisis de tema
- Intervalo de superposición: el valor del intervalo derecho del intervalo actual es mayor que el valor del intervalo izquierdo del intervalo actual, que es el intervalo superpuesto.El valor del intervalo izquierdo del intervalo anterior del intervalo actual se toma como el intervalo izquierdo del intervalo de superposición, y el valor del intervalo frontal del intervalo actual se toma. El valor máximo del valor del intervalo correcto y el valor del intervalo correcto del intervalo actual se usa como el intervalo correcto del intervalo superpuesto.
- Tome el ejemplo 1 como ejemplo: [[1,3], [2,6], [8,10], [15,18]], donde 3> 2, lo que indica que hay un intervalo de superposición, 3 <6, por lo tanto, el primero El intervalo de superposición es [1,6];
/ ** * @param {número [] []} intervalos * @return {número [] []} * / var merge = función (intervalos) { if (! intervalos ||! intervals.length) return []; intervalos.sort ((a, b) => a [0] - b [0]); dejar i = 0; let res = []; while (i <intervals.length) { dejar izquierda = intervalos [i] [0]; dejar a la derecha = intervalos [i] [1]; while (i <intervalos.longitud - 1 && intervalos [i + 1] [0] <= derecha) { i ++; derecha = Math.max (intervalos [i] [1], derecha); } res.push ([izquierda, derecha]); i ++; } return res; };