El tema es de LeetCode
Se puede acceder a otras soluciones o código fuente: tongji4m3
descripción
Dado un conjunto de intervalos, combine todos los intervalos superpuestos.
Ejemplo 1:
输入: intervals = [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
Ejemplo 2:
输入: intervals = [[1,4],[4,5]]
输出: [[1,5]]
解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。
rápido:
intervals[i][0] <= intervals[i][1]
Ideas
按区间的第一个元素排序
for i in N:
lo=intervals[i][0];
hi=intervals[i][1];
while(i+1<N && hi>=intervals[i+1][0]) hi=intervals[++i][1];//扩展该区间
result.add((lo,hi));
detalle
- La longitud del intervalo debe ser la mayor de los dos intervalos combinados.
- Preste atención a las operaciones de conversión de colecciones y matrices
Código
public int[][] merge(int[][] intervals)
{
int N = intervals.length;
List<int[]> result = new LinkedList<>();
//按第一个元素排序
Arrays.sort(intervals, (a,b) -> a[0]-b[0]);
for (int i = 0; i < N; i++)
{
int lo=intervals[i][0];
int hi=intervals[i][1];
while(i+1<N && hi>=intervals[i+1][0])
{
++i;//表明把下一个区间也纳入到了本区间里了
hi=Math.max(hi,intervals[i][1]);//look 扩展该区间,选最大的一个
}
result.add(new int[]{
lo, hi});
}
return (int[][]) result.toArray(new int [result.size()][2]);
}
Análisis de complejidad
complejidad del tiempo
O (N log N) O (N log N) O ( N l o g N ) , principalmente la sobrecarga de clasificación, la otra es el escaneo de N sobrecarga
Complejidad espacial
O (log N) O (logN) O ( l o g N ) , calcule la sobrecarga de espacio adicional fuera de la respuesta, aquí está la complejidad de espacio requerida para ordenar