Me encontré con una buena pregunta mientras me preparaba para algunas entrevistas de programación.Encontrar intervalos elementales en intervalos superpuestos
Dado un conjunto de intervalos posiblemente superpuestos, necesita escribir una función para devolver todos los intervalos elementales entre ellos. Por ejemplo: si se te dan intervalos como la siguiente lista de pares: {{1,5}, {3,10}, {5,11}, {15,18}, {16,20}}, entonces necesitas para devolver lo siguiente:
{{1,3}, {3,5}, {5,10}, {10,11}, {15,16}, {16,18}, {18,20 }}
Nota lo siguiente en la respuesta anterior:
- el intervalo {11,15} se omite en la respuesta, ya que es inexistente en la entrada.
- El intervalo {1,5} de la entrada se ha dividido en {1,3}, {3,5} en la respuesta debido al punto de inicio "3" definido en {3,10} en la entrada que corta el intervalo en dos intervalos elementales.
firma del método en Java:
List<Pair<Integer, Integer>> generateElementaryIntervals(List<Pair<Integer, Integer> intervals)
Una de las soluciones que imaginé era separar la entrada en conjuntos no entrecruzadas, y luego un O sencilla (NlogN) ordenar más de todos los números en cada el conjunto sin intersección arrojará la respuesta. ¿Hay una forma más eficiente de hacerlo?
¿Cuál es tu pregunta? –
¿Qué es lo que no entiendes? – Kowshik
Entiendo bastante bien, pero no ha hecho una pregunta. No hay signos de interrogación en ninguna parte de su publicación. ¿Quieres una solución en Java? ¿Simplemente quieres una idea de cómo abordarlo? ¿Ya lo has pensado y estás colgado en un punto específico? No lo sé. –