Heim >Java >javaLernprogramm >Löschen Sie alle sogar Elemente aus einem Stapel in Java

Löschen Sie alle sogar Elemente aus einem Stapel in Java

Patricia Arquette
Patricia ArquetteOriginal
2025-02-07 11:32:09285Durchsuche

Delete all even elements from a stack in Java

Dieses Tutorial zeigt zwei Methoden zur Beseitigung von sogar Zahlen aus einem Java -Stapel. Stapel, die das LEFO-Prinzip (Last-In-First-Out) halten, stellen eine einzigartige Herausforderung für diese Art der Filterung dar. Die hier gezeigten Techniken sind an andere Filterszenarien anpassbar, die über die einfachen Zahlen hinausgehen.

Das Problem:

Schreiben Sie ein Java -Programm, um alle gleichmäßigen Zahlen zu entfernen.

Beispieleingänge und Ausgänge:

  • Eingabe 1: [1, 2, 3, 4, 5] Ausgabe 1: [1, 3, 5]
  • Eingabe 2: [1, 7, 3, 11, 9] Ausgabe 2: [1, 7, 3, 11, 9] (keine gleichmäßigen Zahlen zu entfernen)

Lösungsansätze:

Wir werden zwei unterschiedliche Ansätze untersuchen:

  1. Verwenden eines Hilfsstapels: Diese Methode verwendet einen temporären Stapel, um ungerade Zahlen zu speichern, während sie durch den Originalstapel iteriert.

  2. Verwenden von Rekursion: Dieser rekursive Ansatz verarbeitet den Stapel effizient und entzieht gleichmäßige Zahlen während der rekursiven Aufrufe.

Methode 1: Hilfsstapel

Dieser Ansatz beinhaltet die folgenden Schritte:

  1. Erstellen Sie ein temporäres Stack (z. B. tempStack).
  2. durch den Originalstapel iterieren und jedes Element knallen.
  3. Wenn das Element ungerade ist (prüfen Sie mit dem Modulo -Operator %), drücken Sie es auf tempStack.
  4. Sobald der Originalstapel leer ist, übertragen Sie Elemente von tempStack zurück zum Originalstapel.

Code -Beispiel (Hilfsstapel):

<code class="language-java">import java.util.Stack;

public class RemoveEvenElements {
    public static void removeEven(Stack<integer> stack) {
        Stack<integer> tempStack = new Stack<>();
        while (!stack.isEmpty()) {
            int element = stack.pop();
            if (element % 2 != 0) {
                tempStack.push(element);
            }
        }
        while (!tempStack.isEmpty()) {
            stack.push(tempStack.pop());
        }
    }

    public static void main(String[] args) {
        Stack<integer> stack = new Stack<>();
        stack.push(1);
        stack.push(2);
        stack.push(3);
        stack.push(4);
        stack.push(5);
        removeEven(stack);
        System.out.println(stack); // Output: [1, 3, 5]
    }
}</integer></integer></integer></code>

Zeit- und Raumkomplexität (Hilfsstapel):

  • Zeitkomplexität: o (n) - Wir iterieren zweimal durch den Stapel.
  • Raumkomplexität: o (n) - Wir verwenden einen Hilfsstapel mit potenziell gleicher Größe wie der Eingangsstapel.

Methode 2: Rekursion

Diese rekursive Lösung behandelt die gleichmäßige Zahlenentfernung elegant:

  1. Basisfall: Wenn der Stapel leer ist, kehren Sie zurück.
  2. das obere Element pop.
  3. rufen Sie die Funktion removeEven rekursiv auf, um den verbleibenden Stapel zu verarbeiten.
  4. Nach dem rekursiven Anruf prüfen Sie, ob das gepackte Element ungerade ist. Wenn ja, schieben Sie es wieder auf den Stapel.

Code -Beispiel (Rekursion):

<code class="language-java">import java.util.Stack;

public class RemoveEvenElements {
    public static void removeEven(Stack<integer> stack) {
        if (stack.isEmpty()) {
            return;
        }
        int element = stack.pop();
        removeEven(stack);
        if (element % 2 != 0) {
            stack.push(element);
        }
    }

    public static void main(String[] args) {
        Stack<integer> stack = new Stack<>();
        stack.push(1);
        stack.push(2);
        stack.push(3);
        stack.push(4);
        stack.push(5);
        removeEven(stack);
        System.out.println(stack); // Output: [1, 3, 5]
    }
}</integer></integer></code>

Zeit- und Raumkomplexität (Rekursion):

  • Zeitkomplexität: o (n) - Wir durchqueren den Stapel rekursiv.
  • Raumkomplexität: o (n) - Der rekursive Anrufstapel kann im schlimmsten Fall bis zur Größe des Eingangsstapels wachsen.

Schlussfolgerung:

Beide Methoden entfernen effektiv gleiche Zahlen aus einem Stapel. Der Hilfsstapelansatz ist einfacher, während der rekursive Ansatz eine prägnantere und möglicherweise etwas effizientere Lösung bietet (abhängig von der Optimierung des JVM). Die Wahl hängt von der persönlichen Präferenz und dem Codierungsstil ab. Denken Sie daran, dass diese Techniken an Filterstapeln basierend auf verschiedenen Kriterien angepasst werden können.

Das obige ist der detaillierte Inhalt vonLöschen Sie alle sogar Elemente aus einem Stapel in Java. 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