2577. Mindestzeit, um eine Zelle in einem Raster zu besuchen
Schwierigkeit: hard
themen: array, breaddis-first-Suche, Diagramm, Heap (Prioritätswarteschlange), Matrix, kürzester Path
Sie erhalten ein m x n Matrix-Gitter, das aus nicht negativ Zahlen besteht, wobei Grid [row] [col] die minimum Zeit darstellt, die erforderlich ist, um die Zelle zu besuchen (Row, col).
Du stehst in dertop-left Zelle der Matrix in der 0 th Sekunde, und du musst zu an jedem in den vier Richtungen: Nach unten, links und rechts. Jeder Schritt, den Sie unternehmen, dauert 1 Sekunde.
returndie minimum Zeit erforderlich, in der Sie die untere Rechtezelle der Matrix besuchen können. Wenn Sie die untere rechte Zelle nicht besuchen können, kehren Sie -1 zurück.
Beispiel 1:
Beispiel 2:
Einschränkungen:
Hinweis:
Lösung:
Wir können eine modifizierte Version vondijkstra's algorithm verwenden Priority Queue . Dieses Problem fordert uns im Wesentlichen auf, die kürzeste Zeit zu finden, die erforderlich ist, um die untere rechte Zelle aus der oberen linken Zelle zu besuchen, wo jeder Umzug eine zeitliche Einschränkung auf der Grundlage der Werte im Raster hat.
Ansatz:Graph Repräsentation : Behandle jede Zelle im Raster als Knoten. Die Kanten sind die benachbarten Zellen (nach oben, links, rechts), zu denen Sie übergehen können.
Priority Queue (min-heap) : Verwenden Sie eine vorrangige Warteschlange, um die Zelle immer mit der geringsten Zeit zu erforschen. Dies stellt sicher, dass wir die Zellen in der Reihenfolge der frühesten Zeit verarbeiten, die wir erreichen können.
modifizierte bfs : Für jede Zelle werden wir überprüfen, ob wir zu seinen benachbarten Zellen wechseln und die Zeit aktualisieren können, zu der wir sie besuchen können. Wenn eine Zelle zu einem späteren Zeitpunkt als in der aktuellen Zeit besucht wird, fügen wir sie mit der neuen Zeit wieder in die Warteschlange hinzu.
Early Exit : Sobald wir die untere rechte Zelle erreichen, können wir die Zeit zurückgeben. Wenn wir die Warteschlange erschöpfen, ohne sie zu erreichen, kehren Sie -1 zurück.
2577. Mindestzeit, um eine Zelle in einem Raster zu besuchen
Erläuterung:
priority queue :
Der SplpriorityQueueue wird verwendet, um sicherzustellen, dass die Zellen mit der Mindestzeit zuerst verarbeitet werden. Die Priorität wird als -Time gespeichert, da der SplpriorityQueue von PHP standardmäßig ein Max -heap ist.
traversal :
Ausgehend von der oberen linken Zelle (0, 0) verarbeitet der Algorithmus alle erreichbaren Zellen unter Berücksichtigung der frühesten Zeit, die jeweils jeweils besucht werden kann (max (0, Grid [NewRow] [Newcol] - (Zeit 1))).
besuchte Zellen :
Ein besuchter Array verfolgt Zellen, die bereits verarbeitet wurden, um redundante Berechnungen und unendliche Schleifen zu vermeiden.
Grenz- und Gültigkeitsprüfung :
Der Algorithmus stellt sicher, dass wir innerhalb der Grenzen des Netzes bleiben und nur gültige Nachbarn verarbeitet.
Zeitberechnung :
Jede Bewegung dauert eine Sekunde, und wenn die Zelle warten muss (d. H. Gitter [Newrow] [Newcol]> Zeit 1), wartet der Algorithmus bis zur erforderlichen Zeit.
edge case :
Wenn die Warteschlange erschöpft ist und die untere rechte Zelle nicht erreicht ist, gibt die Funktion -1.
Zeitkomplexität :
space complexity :
Eingang:
Diese Lösung ist effizient und funktioniert in den Einschränkungen gut.
wenden Sie sich an links
Wenn Sie diese Serie hilfreich gefunden haben, sollten Sie denrepository einen Stern auf Github geben oder den Beitrag in Ihren Lieblingsnetzwerken teilen? Ihre Unterstützung würde mir viel bedeuten!
Wenn Sie mehr hilfreiche Inhalte wie diesen wünschen, können Sie mir gerne folgen:
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3