Heim  >  Artikel  >  Backend-Entwicklung  >  Entschärfe die Bombe

Entschärfe die Bombe

Barbara Streisand
Barbara StreisandOriginal
2024-11-24 16:19:32452Durchsuche

Defuse the Bomb

1652. Entschärfe die Bombe

Schwierigkeit:Einfach

Themen:Array, Schiebefenster

Sie müssen eine Bombe entschärfen und Ihre Zeit wird knapp! Ihr Informant wird Ihnen einen zirkulären Array-Code mit der Länge n und einem Schlüssel k.

zur Verfügung stellen

Um den Code zu entschlüsseln, müssen Sie jede Zahl ersetzen. Alle Zahlen werden gleichzeitig ersetzt.

  • Wenn k > 0, ersetzen Sie die ite Zahl durch die Summe der nächsten k Zahlen.
  • Wenn k < 0, ersetzen Sie die ite Zahl durch die Summe der vorherigen k Zahlen.
  • Wenn k == 0, ersetzen Sie die ite Zahl durch 0.

Da der Code zirkulär ist, ist das nächste Element von Code[n-1] Code[0] und das vorherige Element von Code[0] ist Code[n-1].

Angesichts des zirkulären Array-Codes und eines ganzzahligen Schlüssels k, gib den entschlüsselten Code zurück, um die Bombe zu entschärfen!

Beispiel 1:

  • Eingabe: Code = [5,7,1,4], k = 3
  • Ausgabe: [12,10,16,13]
  • Erklärung: Jede Zahl wird durch die Summe der nächsten 3 Zahlen ersetzt. Der entschlüsselte Code ist [7 1 4, 1 4 5, 4 5 7, 5 7 1]. Beachten Sie, dass die Zahlen umlaufen.

Beispiel 2:

  • Eingabe: Code = [1,2,3,4], k = 0
  • Ausgabe: [0,0,0,0]
  • Erklärung:Wenn k Null ist, werden die Zahlen durch 0 ersetzt.

Beispiel 3:

  • Eingabe: Code = [2,4,9,3], k = -2
  • Ausgabe: [12,5,6,13]
  • Erklärung: Der entschlüsselte Code ist [3 9, 2 3, 4 2, 9 4]. Beachten Sie, dass die Zahlen wieder umlaufen. Wenn k negativ ist, ergibt sich die Summe aus den vorherigen Zahlen.

Einschränkungen:

  • n == code.length
  • 1 <= n <= 100
  • 1 <= Code[i] <= 100
  • -(n - 1) <= k <= n - 1

Hinweis:

  1. Da das Array kreisförmig ist, verwenden Sie Modulo, um den richtigen Index zu finden.
  2. Die Einschränkungen sind niedrig genug für eine Brute-Force-Lösung.

Lösung:

Wir können eine Funktion implementieren, die das Code-Array durchläuft und die Summe der entsprechenden Zahlen basierend auf dem Wert von k berechnet.

Der allgemeine Ansatz wird wie folgt sein:

  1. Wenn k == 0, ersetzen Sie alle Elemente durch 0.
  2. Wenn k > 0, ersetzen Sie jedes Element durch die Summe der nächsten k Elemente im kreisförmigen Array.
  3. Wenn k < 0, ersetzen Sie jedes Element durch die Summe der vorherigen k Elemente im kreisförmigen Array.

Die kreisförmige Natur des Arrays bedeutet, dass Sie für Indizes, die die Grenzen des Arrays überschreiten, Modulo (%) verwenden können, um das Array zu „umschließen“.

Lassen Sie uns diese Lösung in PHP implementieren: 1652. Entschärfe die Bombe






Erläuterung:

  1. Initialisierung:

    • Wir erstellen mit array_fill.
    • ein Ergebnisarray, das mit Nullen initialisiert wird
  2. Handhabung von k == 0:

    • Wenn k Null ist, wird das Ausgabearray einfach mit Nullen gefüllt, wie es das Problem erfordert.
  3. Durchlaufen des Arrays:

    • Für jeden Index i im Array:
      • Wenn k > 0, summieren Sie die nächsten k Elemente mithilfe der Modulo-Arithmetik, um sie zu umschließen.
      • Wenn k < 0, summiere das vorherige |k| Elemente, die Modulo-Arithmetik mit einem Offset verwenden, um negative Indizes zu verarbeiten.
  4. Modulo-Arithmetik:

    • Wir verwenden ($i $j) % $n, um beim Zugriff auf Indizes größer als n - 1 zum Anfang des Arrays zu springen.
    • In ähnlicher Weise übernimmt ($i - $j $n) % $n den Rückwärtsumbruch für negative Indizes.
  5. Komplexität:

    • Zeitkomplexität: O(n . |k|), wobei n die Größe des Arrays ist und |k| ist der absolute Wert von k.
    • Raumkomplexität: O(n) für das Ergebnisarray.

Ausgänge:

Die bereitgestellten Beispiele stimmen mit den erwarteten Ergebnissen überein. Lassen Sie mich wissen, wenn Sie weitere Erklärungen oder Optimierungen benötigen!

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 vonEntschärfe die Bombe. 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