Ich hatte heute ein Interview und wurde gebeten zu prüfen, ob zwei Besprechungskonflikte miteinander bestehen oder nicht. Jedes Meeting hat Startzeit und Endzeit.
Ich habe versucht, die Frage zu beantworten, aber nicht so spezifisch ... kann jemand eine Idee werfen?
sollte true zurückgeben, wenn Konflikt vorhanden ist, und false, wenn kein Konflikt auftritt.
Zum Beispiel
Wahr wenn:
(s1, e1) = 8,10
(s2, e2) = 9, 11
(s1, e1) = 7,10
(s2, e2) = 8, 9
(s1, e1) = 8,11
(s2, e2) = 9, 11 und so weiter
Dies ist grundlegende Intervall-Algebra, siehe meine Antwort hier für weitere Details , aber Der Code würde so aussehen:
%Vor%Ich gehe davon aus, dass zwei Meetings, bei denen man anfängt, wo das andere endet, nicht in Konflikt stehen.
Im einfachen Fall von zwei Intervallen denke ich, dass das funktioniert (ungeprüfter Pseudocode voraus):
%Vor% Die Meetings überschneiden sich genau dann, wenn max(s1, s2) < min(e1, e2)
. Dieser schnittbasierte Ansatz geht davon aus, dass die Intervalle (s, e)
offen sind, und impliziert (zu Recht oder zu Unrecht), dass eine leere Besprechung s = e
sich nicht mit einer anderen Besprechung überschneiden kann.
Der Plan Es gibt drei Fälle, in denen nach diesem Problem gesucht werden muss.
Also hier ist die Antwort. Ich entschuldige mich; Es ist nicht die lesbarste Codezeile.
Der Code (Pseudo):
%Vor%