suchen
HeimBackend-EntwicklungPHP-TutorialMinimale Entfernung von Hindernissen, um die Ecke zu erreichen

2290. Minimale Entfernung von Hindernissen, um die Ecke zu erreichen

Schwierigkeit:Schwer

Themen: Array, Breitensuche, Diagramm, Heap (Prioritätswarteschlange), Matrix, kürzester Pfad

Sie erhalten ein 0-indiziertes 2D-Integer-Array-Gitter der Größe m x n. Jede Zelle hat einen von zwei Werten:

  • 0 stellt eine leere Zelle dar,
  • 1 stellt ein Hindernis dar, das entfernt werden kann.

Sie können von und zu einer leeren Zelle nach oben, unten, links oder rechts wechseln.

Geben Sie die Mindestanzahl der Hindernisse zurück, die Sie entfernen müssen, damit Sie sich von der oberen linken Ecke (0, 0) nach unten rechts bewegen können Ecke (m - 1, n - 1).

Beispiel 1:

Minimum Obstacle Removal to Reach Corner

  • Eingabe: Gitter = [[0,1,1],[1,1,0],[1,1,0]]
  • Ausgabe: 2
  • Erklärung: Wir können die Hindernisse bei (0, 1) und (0, 2) entfernen, um einen Pfad von (0, 0) nach (2, 2) zu erstellen.
    • Es kann gezeigt werden, dass wir mindestens 2 Hindernisse beseitigen müssen, also geben wir 2 zurück.
    • Beachten Sie, dass es möglicherweise andere Möglichkeiten gibt, zwei Hindernisse zu beseitigen, um einen Pfad zu erstellen.

Beispiel 2:

Minimum Obstacle Removal to Reach Corner

  • Eingabe: Gitter = [[0,1,0,0,0],[0,1,0,1,0],[0,0,0,1,0]]
  • Ausgabe: 0
  • Erklärung:Wir können von (0, 0) nach (2, 4) wechseln, ohne irgendwelche Hindernisse zu entfernen, also geben wir 0 zurück.

Einschränkungen:

  • m == Gitterlänge
  • n == grid[i].length
  • 1 5
  • 2 5
  • Grid[i][j] ist entweder 0 oder 1.
  • Gitter[0][0] == Gitter[m - 1][n - 1] == 0

Hinweis:

  1. Modellieren Sie das Gitter als Diagramm, in dem Zellen Knoten sind und Kanten zwischen benachbarten Zellen liegen. Kanten zu Zellen mit Hindernissen kosten 1 und alle anderen Kanten kosten 0.
  2. Könnten Sie die 0-1 Breitensuche oder den Dijkstra-Algorithmus verwenden?

Lösung:

Wir müssen dieses Problem mithilfe eines Diagramms modellieren, in dem jede Zelle im Gitter ein Knoten ist. Das Ziel besteht darin, von der oberen linken Ecke (0, 0) zur unteren rechten Ecke (m-1, n-1) zu navigieren und dabei die Anzahl der Hindernisse (1s) zu minimieren, die wir entfernen müssen.

Ansatz:

  1. Grafikdarstellung:

    • Jede Zelle im Raster ist ein Knoten.
    • Bewegungen zwischen benachbarten Zellen (oben, unten, links, rechts) werden als Kante behandelt.
    • Wenn sich eine Kante durch eine Zelle mit einer 1 (Hindernis) bewegt, betragen die Kosten 1 (Hindernis entfernen), und wenn sie sich durch eine 0 (leere Zelle) bewegt, betragen die Kosten 0.
  2. Algorithmusauswahl:

    • Da wir die Anzahl der entfernten Hindernisse minimieren müssen, können wir 0-1 BFS (Breadth-First Search mit einer Deque) oder Dijkstras Algorithmus mit einer Prioritätswarteschlange verwenden.
    • 0-1 BFS ist hier geeignet, da jede Kante Kosten von entweder 0 oder 1 hat.
  3. 0-1 BFS:

    • Wir verwenden eine Deque (doppelte Warteschlange), um Knoten mit unterschiedlichen Kosten zu verarbeiten:
      • Schiebt Zellen mit Kosten 0 an den Anfang der Doppelschlange.
      • Schieben Sie Zellen mit Kosten 1 an die Rückseite der Doppelschlange.
    • Die Idee besteht darin, das Raster zu erkunden und immer zuerst den Weg zu erweitern, der keine Beseitigung von Hindernissen erfordert, und Hindernisse nur dann zu entfernen, wenn es nötig ist.

Lassen Sie uns diese Lösung in PHP implementieren: 2290. Minimale Entfernung von Hindernissen, um die Ecke zu erreichen

<?php /**
 * @param Integer[][] $grid
 * @return Integer
 */
function minimumObstacles($grid) {
    ...
    ...
    ...
    /**
     * go to ./solution.php
     */
}

// Test Case 1
$grid1 = [
    [0, 1, 1],
    [1, 1, 0],
    [1, 1, 0]
];
echo minimumObstacles($grid1) . PHP_EOL; // Output: 2

// Test Case 2
$grid2 = [
    [0, 1, 0, 0, 0],
    [0, 1, 0, 1, 0],
    [0, 0, 0, 1, 0]
];
echo minimumObstacles($grid2) . PHP_EOL; // Output: 0
?>

Erläuterung:

  1. Eingabeanalyse:

    • Das Raster wird als 2D-Array verwendet.
    • Zeilen und Spalten werden zur Grenzprüfung berechnet.
  2. Deque-Implementierung:

    • SplDoublyLinkedList wird zur Simulation der Deque verwendet. Es unterstützt das Hinzufügen von Elementen vorne (unshift) oder hinten (push).
  3. Besuchtes Array:

    • Verfolgt bereits besuchte Zellen, um redundante Verarbeitung zu vermeiden.
  4. 0-1 BFS-Logik:

    • Beginnen Sie bei (0, 0) mit Kosten von 0.
    • Für jede benachbarte Zelle:
      • Wenn es leer ist (grid[nx][ny] == 0), fügen Sie es mit den gleichen Kosten an der Vorderseite der Deque hinzu.
      • Wenn es sich um ein Hindernis handelt (grid[nx][ny] == 1), fügen Sie es mit erhöhten Kosten an der Rückseite der Deque hinzu.
  5. Ergebnis zurückgeben:

    • Wenn die untere rechte Ecke erreicht ist, geben Sie die Kosten zurück.
    • Wenn kein gültiger Pfad vorhanden ist (obwohl das Problem einen garantiert), geben Sie -1 zurück.

Komplexität:

  • Zeitkomplexität: O(m x n), wobei m die Anzahl der Zeilen ist und n ist die Anzahl der Spalten. Jede Zelle wird einmal verarbeitet.
  • Raumkomplexität: O(m x n), für das besuchte Array und die besuchte Deque.

Diese Implementierung funktioniert innerhalb der gegebenen Einschränkungen effizient.

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:

  • LinkedIn
  • GitHub

Das obige ist der detaillierte Inhalt vonMinimale Entfernung von Hindernissen, um die Ecke zu erreichen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
PHP -Protokollierung: Best Practices für die PHP -ProtokollanalysePHP -Protokollierung: Best Practices für die PHP -ProtokollanalyseMar 10, 2025 pm 02:32 PM

Die PHP -Protokollierung ist für die Überwachung und Debugie von Webanwendungen von wesentlicher Bedeutung sowie für das Erfassen kritischer Ereignisse, Fehler und Laufzeitverhalten. Es bietet wertvolle Einblicke in die Systemleistung, hilft bei der Identifizierung von Problemen und unterstützt eine schnellere Fehlerbehebung

Arbeiten mit Flash -Sitzungsdaten in LaravelArbeiten mit Flash -Sitzungsdaten in LaravelMar 12, 2025 pm 05:08 PM

Laravel vereinfacht die Behandlung von temporären Sitzungsdaten mithilfe seiner intuitiven Flash -Methoden. Dies ist perfekt zum Anzeigen von kurzen Nachrichten, Warnungen oder Benachrichtigungen in Ihrer Anwendung. Die Daten bestehen nur für die nachfolgende Anfrage standardmäßig: $ Anfrage-

Curl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIsCurl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIsMar 14, 2025 am 11:42 AM

Die PHP Client -URL -Erweiterung (CURL) ist ein leistungsstarkes Tool für Entwickler, das eine nahtlose Interaktion mit Remote -Servern und REST -APIs ermöglicht. Durch die Nutzung von Libcurl, einer angesehenen Bibliothek mit Multi-Protokoll-Dateien, erleichtert PHP Curl effiziente Execu

Vereinfachte HTTP -Reaktion verspottet in Laravel -TestsVereinfachte HTTP -Reaktion verspottet in Laravel -TestsMar 12, 2025 pm 05:09 PM

Laravel bietet eine kurze HTTP -Antwortsimulationssyntax und vereinfache HTTP -Interaktionstests. Dieser Ansatz reduziert die Code -Redundanz erheblich, während Ihre Testsimulation intuitiver wird. Die grundlegende Implementierung bietet eine Vielzahl von Verknüpfungen zum Antworttyp: Verwenden Sie Illuminate \ Support \ facades \ http; Http :: fake ([ 'Google.com' => 'Hallo Welt',, 'github.com' => ['foo' => 'bar'], 'Forge.laravel.com' =>

12 Beste PHP -Chat -Skripte auf Codecanyon12 Beste PHP -Chat -Skripte auf CodecanyonMar 13, 2025 pm 12:08 PM

Möchten Sie den dringlichsten Problemen Ihrer Kunden in Echtzeit und Sofortlösungen anbieten? Mit Live-Chat können Sie Echtzeitgespräche mit Kunden führen und ihre Probleme sofort lösen. Sie ermöglichen es Ihnen, Ihrem Brauch einen schnelleren Service zu bieten

Erklären Sie das Konzept der späten statischen Bindung in PHP.Erklären Sie das Konzept der späten statischen Bindung in PHP.Mar 21, 2025 pm 01:33 PM

In Artikel wird die in PHP 5.3 eingeführte LSB -Bindung (LSB) erörtert, die die Laufzeitauflösung der statischen Methode ermöglicht, um eine flexiblere Vererbung zu erfordern. Die praktischen Anwendungen und potenziellen Perfo von LSB

Anpassung/Erweiterung von Frameworks: So fügen Sie benutzerdefinierte Funktionen hinzu.Anpassung/Erweiterung von Frameworks: So fügen Sie benutzerdefinierte Funktionen hinzu.Mar 28, 2025 pm 05:12 PM

In dem Artikel werden Frameworks hinzugefügt, das sich auf das Verständnis der Architektur, das Identifizieren von Erweiterungspunkten und Best Practices für die Integration und Debuggierung hinzufügen.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools

Dreamweaver Mac

Dreamweaver Mac

Visuelle Webentwicklungstools

Sicherer Prüfungsbrowser

Sicherer Prüfungsbrowser

Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.

VSCode Windows 64-Bit-Download

VSCode Windows 64-Bit-Download

Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor