Sie können die Vereinigung der vorhandenen und potenziellen Termine in einem einzigen Array vornehmen und die Union nach Startzeit sortieren. Fügen Sie den Intervallen ein Label hinzu, damit Sie wissen, dass es sich um ein vorhandenes oder ein potenzielles Intervall handelt. (Sie können sie auch in separaten Arrays sortieren und zwei Indizes inkrementieren, aber der Code ist einfacher mit einer Liste).
Sie können dann das kombinierte Array durchlaufen und benachbarte Intervalle zusammenführen, wenn sie sich überlappen. Fassen Sie nur bestehende Termine mit bestehenden und ebenfalls potenziellen Terminen mit Potenzial zusammen. Dazu müssen Sie sich die letzten vorhandenen und möglichen Intervalle merken.
Auf diese Weise müssen Sie nicht bis zum Anfang zurückgehen, Sie müssen nur die zuletzt zusammengeführten Intervalle betrachten.
In psedudocode:
E: existing appointments
P: potential appointments
A: union of P and E, sorted by start time
lastE = []
lastP = []
for each appointment a in A:
if a is existing:
if a overlaps with lastE:
lastE = lastE + [a]
else
lastE = [a]
if a overlaps with lastP:
print all appointments in lastP overlapping with a
if a is potential:
if a overlaps with lastE:
print a
if a overlaps with lastP:
lastP = lastP + [a]
else:
lastP = [a]
Beachten Sie, dass Sie nicht die Struktur lastE
speichern müssen, können Sie es als ein einzelnes Intervall definieren und die Start- und Endzeit einzustellen.
Sie müssen jedoch die einzelnen Termine in lastP
kennen. Sie können es möglicherweise noch weiter optimieren, indem Sie eine absteigende Reihenfolge nach Endzeit in lastP
beibehalten. Dann, in der Zeile, wenn alle Überlappungen zwischen a
und lastP
gedruckt werden, können Sie aufhören zu suchen, sobald die Endzeit des möglichen Termins in lastP
kleiner ist als die Startzeit von a
.
Für welche Programmiersprache? –