Ein paar Gedanken dazu
Für die Anzahl der Überlappungen stell ich mir das so wie in deinem Beispiel vor, wie jeder Zahlenbereich auf dem Zahlenstrahl liegt und man zählt für jede Zahl auf dem Strahl, wie viele Bereiche zu ihr gehören.
Dazu würde es helfen, wenn du die Bereiche nach der Startzahl sortierst. Dann gehst du alle Zahlen auf dem Strahl durch (also ne Schleife mit i++) und zählst alle Bereiche die
- an der aktuellen Zahl anfangen
- vorher schon angefangen haben und immer noch gültig sind
Ein Bereich aus der Liste "vorher schon angefangen" wird gelöscht, wenn er die aktuelle Zahl nicht mehr enthält. Ein gerade begonnener Bereich kommt in die Liste. Das dürfte die Anzahl der Suchvorgänge ziemlich niedrig halten.
Optimierungen:
Wenn du in der Schleife feststellst dass zum aktuellen i kein Bereich mehr passt, kannst du bei der Startzahl des nächsten Bereichs in der sortierten Liste weitermachen.
Vielleicht bringt dich das schon mal gedanklich weiter.