729. Mein Kalender I
Schwierigkeit:Mittel
Themen: Array, Binäre Suche, Design, Segmentbaum, geordnete Menge
Sie implementieren ein Programm, das Sie als Kalender verwenden möchten. Wir können eine neue Veranstaltung hinzufügen, wenn das Hinzufügen der Veranstaltung nicht zu einer Doppelbuchung führt.
Eine Doppelbuchung tritt auf, wenn zwei Ereignisse einen nicht leeren Schnittpunkt haben (d. h. ein Moment ist beiden Ereignissen gemeinsam).
Das Ereignis kann als Paar aus ganzen Zahlen Anfang und Ende dargestellt werden, das eine Buchung im halboffenen Intervall [Anfang, Ende] darstellt, dem Bereich reeller Zahlen x, so dass Anfang <= x < Ende.
Implementieren Sie die MyCalendar-Klasse:
Beispiel 1:
["MyCalendar", "book", "book", "book"] [[], [10, 20], [15, 25], [20, 30]]
[null, true, false, true]
MyCalendar myCalendar = new MyCalendar(); myCalendar.book(10, 20); // return True myCalendar.book(15, 25); // return False, It can not be booked because time 15 is already booked by another event. myCalendar.book(20, 30); // return True, The event can be booked, as the first event takes every time less than 20, but not including 20.
Einschränkungen:
Hinweis:
Lösung:
Wir müssen jede Veranstaltung speichern und prüfen, ob die neue Veranstaltung mit einer der bestehenden Veranstaltungen in Konflikt steht, bevor wir sie buchen. Da maximal 1000 Buchungsaufrufe zulässig sind, können wir die Veranstaltungen in einer Liste speichern und sie durchlaufen, um bei der Buchung neuer Veranstaltungen auf Überschneidungen zu prüfen.
Lassen Sie uns diese Lösung in PHP implementieren: 729. Mein Kalender I
book($start, $end); */ // Example Usage: $myCalendar = new MyCalendar(); var_dump($myCalendar->book(10, 20)); // true, no conflicts, booking added var_dump($myCalendar->book(15, 25)); // false, conflict with [10, 20] var_dump($myCalendar->book(20, 30)); // true, no conflicts, booking added ?>Erläuterung:
Konstruktor (__construct): Initialisiert ein leeres Array $events, um alle gebuchten Ereignisse im Auge zu behalten.
Buchungsfunktion (Buch):
- Es ist der Beginn und das Ende eines neuen Ereignisses.
- Es durchläuft die Liste der zuvor gebuchten Veranstaltungen und prüft auf etwaige Überschneidungen:
- Eine Überschneidung tritt auf, wenn die neue Veranstaltung beginnt, bevor eine bestehende Veranstaltung endet ($start < $bookedEnd) und endet, nachdem eine bestehende Veranstaltung beginnt ($end > $bookedStart).
- Wenn eine Überschneidung festgestellt wird, gibt die Funktion „false“ zurück, was bedeutet, dass die Veranstaltung nicht gebucht werden kann.
- Wenn keine Konflikte gefunden werden, wird das Ereignis zum Array $events hinzugefügt und die Funktion gibt „true“ zurück, um eine erfolgreiche Buchung anzuzeigen.
Zeitkomplexität:
Erste Buchung (Buch(10, 20)):
Zweite Buchung (Buch(15, 25)):
Dritte Buchung (Buch(20, 30)):
Dieser einfache Ansatz verarbeitet effizient bis zu 1000 Ereignisse und sorgt gleichzeitig für Klarheit und Korrektheit.
Kontaktlinks
Wenn Sie diese Serie hilfreich fanden, denken Sie bitte darüber nach, dem Repository einen Stern auf GitHub zu geben oder den Beitrag in Ihren bevorzugten sozialen Netzwerken zu teilen? Ihre Unterstützung würde mir sehr viel bedeuten!
Wenn Sie weitere hilfreiche Inhalte wie diesen wünschen, folgen Sie mir gerne:
Das obige ist der detaillierte Inhalt von. Mein Kalender I. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!