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:
[1, 2, 3, 4, 5]
Ausgabe 1: [1, 3, 5]
[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:
Verwenden eines Hilfsstapels: Diese Methode verwendet einen temporären Stapel, um ungerade Zahlen zu speichern, während sie durch den Originalstapel iteriert.
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:
Stack
(z. B. tempStack
). %
), drücken Sie es auf tempStack
. tempStack
zurück zum Originalstapel. Code -Beispiel (Hilfsstapel):
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] } }
Zeit- und Raumkomplexität (Hilfsstapel):
Methode 2: Rekursion
Diese rekursive Lösung behandelt die gleichmäßige Zahlenentfernung elegant:
removeEven
rekursiv auf, um den verbleibenden Stapel zu verarbeiten. Code -Beispiel (Rekursion):
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] } }
Zeit- und Raumkomplexität (Rekursion):
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!