


Java -Programm, um die maximalen und minimalen Elemente in einem Stapel zu finden
Feb 07, 2025 am 11:24 AM
Stack ist eine grundlegende Datenstruktur, die dem letzten ersten Out-Prinzip (auch als LIFO bekannt) folgt. Es gibt viele Anwendungsf?lle für den Stapel, z. B. die Organisation von Funktionsaufrufen und das Rückg?ngigungsbetrieb. Oft kann man auf das Problem sto?en, die gr??ten und kleinsten Elemente im Stapel zu finden, und dieser Artikel zeigt mehrere M?glichkeiten, diese Aufgabe mit Java zu erfüllen.
Stack verstehen
Stack ist eine lineare Datenstruktur, die Operationen nur an einem Ende erm?glicht, die als Top bezeichnet wird. Hauptvorg?nge umfassen:
- drücken (drücken) : Fügen Sie Elemente an die Oberseite des Stapels hinzu.
- pop (pop) : Entfernt und kehrt zum oberen Element des Stapels zurück.
- Ansicht (Peek) : Zeigen Sie das obere Element des Stapels an, ohne ihn zu entfernen.
- isEmpty (isEmpty) : überprüfen Sie, ob der Stapel leer ist.
Problemanweisung
Ziel ist es, die maximalen und minimalen Elemente im Stapel zu bestimmen. Angesichts der Lebenssch?rfe des Stapels k?nnen andere Elemente als die Oberseite nicht direkt zugegriffen werden. Dies erfordert das Durchqueren des Stapels und verfolgt gleichzeitig die maximalen und minimalen Werte.
Verwenden Sie zwei zus?tzliche Variablen
Hier verwenden wir zwei Variablen min
und max
, um die minimalen und maximalen Werte zu verfolgen. Iterieren Sie den Stapel und aktualisieren Sie diese Variablen, sobald jedes Element verarbeitet wird. Dies ist die einfachste Methode und die zeitaufw?ndigste und r?umlich-konsumierende Methode.
import java.util.Stack; public class MaxMinInStack { public static void main(String[] args) { Stack<Integer> stack = new Stack<>(); stack.push(10); stack.push(20); stack.push(30); stack.push(5); stack.push(15); int[] result = findMaxMin(stack); System.out.println("最大元素: " + result[0]); System.out.println("最小元素: " + result[1]); } public static int[] findMaxMin(Stack<Integer> stack) { if (stack.isEmpty()) { throw new IllegalArgumentException("棧為空"); } int max = Integer.MIN_VALUE; int min = Integer.MAX_VALUE; for (Integer element : stack) { if (element > max) { max = element; } if (element < min) { min = element; } } return new int[]{max, min}; } }
Ausgabe
Maximale Elemente: 30 Minimalelement: 5
Verwenden Sie den Hilfsstapel
Hier durchqueren wir den Stapel, indem wir einen Pop-up-Vorgang verwenden und die minimalen und maximalen Werte bei Bedarf aktualisieren. Der Hilfsstapel spart vorübergehend Elemente und stellt diese Elemente dann in den Originalstapel wieder her.
import java.util.Stack; public class MaxMinInStack { public static void main(String[] args) { Stack<Integer> stack = new Stack<>(); stack.push(10); stack.push(20); stack.push(30); stack.push(5); stack.push(15); int[] result = findMaxMinWithAuxiliaryStack(stack); System.out.println("最大元素: " + result[0]); System.out.println("最小元素: " + result[1]); } public static int[] findMaxMinWithAuxiliaryStack(Stack<Integer> stack) { if (stack.isEmpty()) { throw new IllegalArgumentException("棧為空"); } Stack<Integer> tempStack = new Stack<>(); int max = stack.peek(); int min = stack.peek(); while (!stack.isEmpty()) { int current = stack.pop(); if (current > max) { max = current; } if (current < min) { min = current; } tempStack.push(current); } while (!tempStack.isEmpty()) { stack.push(tempStack.pop()); } return new int[]{max, min}; } }
Ausgabe
Maximale Elemente: 30 Minimalelement: 5
Verwenden Sie zwei Stapel
Diese Methode verwendet zwei zus?tzliche Stapel, eine zum Erinnern an das gr??te Element (maxStack
) und das andere zum Erinnern an das kleinste Element (minStack
). Jedes Mal, wenn ein neues Element in den Hauptstapel eingeht, geben wir ihn auch in maxStack
oder minStack
in
import java.util.Stack; public class MaxMinInStack { // ... (main method remains the same) ... public static int[] findMaxMinWithTwoStacks(Stack<Integer> stack) { Stack<Integer> maxStack = new Stack<>(); Stack<Integer> minStack = new Stack<>(); while (!stack.isEmpty()) { int current = stack.pop(); if (maxStack.isEmpty() || current >= maxStack.peek()) { maxStack.push(current); } if (minStack.isEmpty() || current <= minStack.peek()) { minStack.push(current); } } return new int[]{maxStack.peek(), minStack.peek()}; } }
Ausgabe
Maximale Elemente: 30 Minimalelement: 5
Verwenden Sie die modifizierte Stapelstruktur
Die Stapelstruktur wird so modifiziert, dass sie die maximalen und minimalen Werte und regul?ren Stapelelemente in sich einbeziehen. Jedes Element wird als Paar gespeichert, das den Wert, den aktuellen Maximalwert und den aktuellen Mindestwert enth?lt.import java.util.Stack; public class MaxMinInStack { static class StackNode { int value; int currentMax; int currentMin; StackNode(int value, int currentMax, int currentMin) { this.value = value; this.currentMax = currentMax; this.currentMin = currentMin; } } public static void main(String[] args) { Stack<StackNode> stack = new Stack<>(); push(stack, 10); push(stack, 20); push(stack, 30); push(stack, 5); push(stack, 15); int[] result = findMaxMinWithModifiedStack(stack); System.out.println("最大元素: " + result[0]); System.out.println("最小元素: " + result[1]); } public static void push(Stack<StackNode> stack, int value) { int max = stack.isEmpty() ? value : Math.max(value, stack.peek().currentMax); int min = stack.isEmpty() ? value : Math.min(value, stack.peek().currentMin); stack.push(new StackNode(value, max, min)); } public static int[] findMaxMinWithModifiedStack(Stack<StackNode> stack) { if (stack.isEmpty()) { throw new IllegalArgumentException("棧為空"); } StackNode topNode = stack.peek(); return new int[]{topNode.currentMax, topNode.currentMin}; } }
Ausgabe
Maximale Elemente: 30 Minimalelement: 5
Schlussfolgerung
Auf der Suche nach den gr??ten und kleinsten Elementen im Stapel kann auf unterschiedliche Weise gel?st werden, jeweils mit seinen Vor- und Nachteilen. Die gezeigten Methoden umfassen die Verwendung zus?tzlicher Variablen, Hilfsstapel, die Verwaltung separater Stapel für maximale und minimale Werte oder das ?ndern der Struktur des Stapels selbst.Jede Technologie bietet eine spezifische M?glichkeit, Zugriffs- oder Speichern von Stapelelementen zu bew?ltigen, wodurch sie für bestimmte Situationen geeignet sind, die auf Speicherbeschr?nkungen, Leistungsanforderungen und Datenintegrit?tsanforderungen basieren. Das Verst?ndnis und Anwenden dieser Methoden kann Entwicklern helfen, effektiv mit Stapeln in Java umzugehen, wodurch ihre Anwendungen für bestimmte Situationen am besten geeignet sind.
Das obige ist der detaillierte Inhalt vonJava -Programm, um die maximalen und minimalen Elemente in einem Stapel zu finden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Die Datei "Settings.JSON" befindet sich auf dem Pfad auf Benutzerebene oder Arbeitsbereichsebene und wird verwendet, um die VSCODE-Einstellungen anzupassen. 1. Benutzer-Level-Pfad: Windows ist C: \ Benutzer \\ AppData \ Roaming \ Code \ User \ Settings.json, MacOS is /users//library/applicationsupport/code/user/settings.json, Linux is /home/.config/code/usser/setings.json; 2. Pfad auf Arbeitsbereichsebene: .VSCODE/Einstellungen im Projekt Root Directory

Um JDBC -Transaktionen korrekt zu verarbeiten, müssen Sie zun?chst den automatischen Komiti -Modus ausschalten und dann mehrere Vorg?nge ausführen und schlie?lich entsprechend den Ergebnissen festlegen oder rollen. 1. Nennen Sie Conn.SetAutoCommit (False), um die Transaktion zu starten. 2. Führen Sie mehrere SQL -Operationen aus, z. B. einfügen und aktualisieren. 3. Rufen Sie Conn.Commit () an, wenn alle Vorg?nge erfolgreich sind, und rufen Sie Conn.Rollback () auf, wenn eine Ausnahme auftritt, um die Datenkonsistenz zu gew?hrleisten. Gleichzeitig sollten Try-with-Ressourcen verwendet werden, um Ressourcen zu verwalten, Ausnahmen ordnungsgem?? zu behandeln und Verbindungen zu schlie?en, um Verbindungsleckage zu vermeiden. Darüber hinaus wird empfohlen, Verbindungspools zu verwenden und Save -Punkte zu setzen, um teilweise Rollback zu erreichen und Transaktionen so kurz wie m?glich zu halten, um die Leistung zu verbessern.

Abh?ngigkeitsinjektion (DI) IsAdeSnIntWhereObjectSRecedEpendencieSexternally, PromotingLoosecoubingAneAtReTingThroughConstructor, Setter, Orfieldinjection.2springFrameworkuSaSNotations-@-Komponenten,@Service und@autowiredWithjava-basierte Konfitation

Itertools.combinations wird verwendet, um alle nicht repetitiven Kombinationen (irrelevant) zu generieren, die eine bestimmte Anzahl von Elementen aus dem iterablen Objekt ausw?hlen. Die Verwendung umfasst: 1. Auswahl 2 Elementkombinationen aus der Liste, wie z. 2. Nehmen Sie 3 Charakterkombinationen von Saiten wie "ABC" und "ABD", die für die Subsequence -Erzeugung geeignet sind; 3. Finden Sie die Kombinationen, in denen die Summe von zwei Zahlen dem Zielwert entspricht, z. B. 1 5 = 6, die Doppelschleifenlogik vereinfachen. Der Unterschied zwischen Kombinationen und Anordnung besteht darin, ob die Reihenfolge wichtig ist, Kombinationen betrachten AB und BA als gleich, w?hrend Permutationen als unterschiedlich angesehen werden.

java.lang.outofMemoryError: JavaheapSpace zeigt den unzureichenden Heap -Speicher an und muss die Verarbeitung gro?er Objekte, Speicherlecks und Haufeneinstellungen überprüfen und den Code über das Heap -Dump -Analyse -Tool lokalisieren und optimieren. 2. METASPACE -Fehler sind aufgrund der überm??igen Klassenmetadaten h?ufig in der dynamischen Klassengenerierung oder in der Hot -Bereitstellung vorhanden, und MaxMetaspaceSize sollte eingeschr?nkt sein und die Klassenbelastung sollte optimiert werden. 3.. UnabletocreatenewnativetHhread aufgrund anstrengender Systemfadenressourcen müssen die Anzahl der Gewinde überprüfen, Gewindepools verwenden und die Stapelgr??e einstellen. V.

Das Fixture ist eine Funktion, mit der voreingestellte Umgebungen oder Daten für Tests bereitgestellt werden. 1. Verwenden Sie den Dekorateur für @PyTest.Fixure, um die Fixture zu definieren. 2. Inject Fixture in Parameterform in der Testfunktion; 3. Führen Sie ein Setup vor Ausbeute aus und rei?en Sie dann ab. 4. Steuerungsumfang durch Umfangsparameter wie Funktion, Modul usw.; 5. Legen Sie das gemeinsame Ger?t in conftest.

ThejvMenablesJavas "Writeonce, Runanywhere" -CapabilityByexecutingByteCodethroughfourMainComponents: 1.TheClassloadersubStemLoads, Links, undinitializes

Verwenden Sie Klassen im Java.Time -Paket, um das alte Datum und die Kalenderklassen zu ersetzen. 2. Erhalten Sie das aktuelle Datum und die aktuelle Uhrzeit durch LocalDate, LocalDatetime und Local Time; 3. Erstellen Sie ein bestimmtes Datum und eine bestimmte Uhrzeit mit der von () Methode; 4.. Verwenden Sie die Plus/Minus -Methode, um die Zeit nicht zu erh?hen und zu verkürzen. 5. Verwenden Sie ZonedDatetime und zoneId, um die Zeitzone zu verarbeiten. 6. Format und analysieren Sie Datumszeichenfolgen über DateTimeFormatter; 7. Verwenden Sie sofortige, um bei Bedarf mit den alten Datumstypen kompatibel zu sein. Die Verarbeitung der Datum in der modernen Java sollte der Verwendung von Java.Timeapi vorrangig machen, was klare, unver?nderliche und linear ist
