I tienen una matriz en el siguiente formato:¿Combinación de rangos superpuestos en matrices PHP?
array(
0 => array(1, 5),
1 => array(4, 8),
2 => array(19, 24),
3 => array(6, 9),
4 => array(11, 17),
);
Cuando cada artículo es una gama X-a-Y. Lo que me gustaría fusionar los intervalos que se solapan en la matriz, para conseguir algo de la misma familia:
array(
0 => array(1, 9), // 1-5, 4-8 and 6-9 are overlapping, so they are merged
1 => array(11, 17),
2 => array(19, 24),
);
lo que sería la mejor manera de lograr esto?
+1 Este es el más limpio y más eficiente ser O (n). Este es exactamente el algoritmo que tenía en mente, tú me ganaste. – Keyo
¿Qué sirve el +1 para @ $ data [$ n] [1]? Cuando uso números de coma flotante esto no funciona en mi caso. –
@Tom, con números enteros, quiere '[1,2], [3,4]' para ser un único rango de '[1,4]'. En ese caso, leería 'if (3> 2 + 1)' y luego comenzaría un nuevo rango. Con números de coma flotante, no es realmente útil. El +1, puede soltarse o establecerse en un delta muy pequeño (+.00001), dependiendo de lo que considere lo suficientemente pequeño como para ser el mismo número. – Matthew