ho un array nel seguente formato:Unione di intervalli sovrapposti in array PHP?
array(
0 => array(1, 5),
1 => array(4, 8),
2 => array(19, 24),
3 => array(6, 9),
4 => array(11, 17),
);
Dove ogni elemento è una gamma X-a-Y. Quello che vorrei per unire le gamme di sovrapposizione nella matrice, per ottenere qualcosa di più simile a questo:
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),
);
Quale sarebbe il modo migliore per ottenere questo risultato?
+1 Questo è il più pulito e più efficiente essere O (n). Questo è esattamente l'algoritmo che avevo in mente, mi hai battuto su di esso. – Keyo
Che cosa serve il +1 per @ $ data [$ n] [1]? Quando si usano i numeri in virgola mobile questo non funziona nel mio caso. –
@Tom, con numeri interi, si desidera che '[1,2], [3,4]' sia un singolo intervallo di '[1,4]'. In tal caso, leggerà 'if (3> 2 + 1)', quindi avvierà un nuovo intervallo. Con i numeri in virgola mobile, non è davvero utile. Il +1, può essere eliminato o impostato su un delta molto piccolo (+.00001), a seconda di ciò che consideri abbastanza piccolo da essere lo stesso numero. – Matthew