FInd überlappende Termine in O (n) Zeit?

Ich wurde kürzlich gefragt, ob diese Frage in einem interview. Obwohl ich war in der Lage, die O(n2) - Lösung, der interviewer war besessen von einer O(n) Lösung. Ich habe auch geprüft paar andere Lösungen O(n logn), das habe ich verstanden, aber O(n) Lösung ist noch nicht meine Tasse Tee, die davon ausgeht Termine, sortiert nach der start-Zeit.

Kann das jemand erklären?

Anweisung Problem:die Sie gegeben sind n Termine. Jeder Termin enthält eine Startzeit und eine Endzeit ein. Sie müssen retun alle in Konflikt stehende Termine effizient.

Person: 1,2, 3, 4, 5

App Starten: 2, 4, 29, 10, 22

App Ende: 5, 7, 34, 11, 36

Antwort: 2x1 5x3

O(n logn) Algorithmus: separates start-und end-Punkt wie diesem:

2s, 4s, 29s, 10s, 22s, 5e, 7e, 34e, 11e, 36e

dann Sortieren Sie alle diese Punkte (für Einfachheit nehmen wir an, jeder Punkt ist einzigartig):

2s, 4s, 5e, 7e, 10s, 11e, 22s, 29s, 34e, 36e

wenn wir mal in Folge startet ohne enden, dann ist es überlappend:
2s, 4s benachbart sind, so dass überschneidungen gibt es

Halten wir eine Anzahl von "s" und jedes mal, wenn wir uns begegnen wird es +1, und wenn e angetroffen wird, verringern wir die Anzahl von 1.

InformationsquelleAutor der Frage Dude | 2012-09-05

Schreibe einen Kommentar