Definamos la clase de intervalo como:
intervalo de clases {
int start;
int end;
Intervalo público (); // define tu constructor aquí
}
Ahora, suponga que tiene 10 intervalos de este tipo y desea fusionar los intervalos superpuestos. El algoritmo para esto es el siguiente:
- Cómo encontrar los factores primos de los números rápidamente
- ¿Cuáles son algunas fórmulas matemáticas que pueden ayudarlo mucho en la resolución de problemas?
- ¿Hay algo útil sobre cualquier raíz n-ésima de -1 donde n> 2?
- ¿Puede mi esposo solicitar dinero para / de una escritura de reclamo rápido?
- Para enteros positivos [matemática] m [/ matemática] y [matemática] n [/ matemática], donde [matemática] m <n [/ matemática], ¿cómo podemos saber si [matemática] m ^ n [/ matemática] es mayor que, menor o igual que [math] n ^ m [/ math], aparte de usar una calculadora?
Ordene los intervalos wrt al valor “inicial”;
int cuenta = 0; (no de intervalos superpuestos)
Definir una lista de arrayl (res) para mantener los nuevos intervalos
Digamos que su preStart = inicio actual (del primer intervalo) y preEnd = final (del primer intervalo)
Ahora, itere de i = 1 a len (conjunto de intervalos original)
Compare, start_i con preEnd (paso 3), si start_i es mayor que, es decir, sin superposición. Por lo tanto, ponga (preStart, preEnd to the “res”) y reasigne, preStart = start_i y preEnd = end_i
Más,
Encuentre el punto final, preEnd = Math.max (preEnd, end_i).
recuento ++;
Después, finaliza la iteración, solo vuelve a poner, preStart y preEnd a la “res”.
Número de intervalos superpuestos : recuento
Complejidad del tiempo:
Ordenar los intervalos (nlogn)
- Iteraciones: O (n)
Complejidad espacial:
- Peor caso: O (n)