Implementieren eines Stapels mithilfe einer Warteschlange
Quelle: Hackernoon Der Inhalt dieses Artikels widmet sich der Lösung des Problems der Implementierung eines Stacks mit nur zwei Warteschlangen. Wir haben ein Problem mit Leetcode :
Implementieren Sie einen Last-In-First-Out-Stack (LIFO) mit nur zwei Warteschlangen. Der implementierte Stack muss alle Funktionen eines regulären Stacks unterstützen ( push , top , pop und empty ). Implementieren Sie die MyStack-Klasse:
Weitere Details:
Beispiel 1: Eingang
Ausgabe
[null, null, null, 2, 2, falsch]
Erläuterung
|
Die Lösung des Problems
Erste Wahl
In der ersten Lösung werden wir zusätzlichen Speicher verwenden:static class MyStack {
private Queue<Integer> current;
private Queue<Integer> tmp;
public MyStack() {
current = new ArrayDeque<>();
tmp = new ArrayDeque<>();
}
Für diese Lösung benötigen wir eine zusätzliche Warteschlange. Beginnen wir mit push . Für eine Push- Operation fügen wir einfach ein neues Element zu unserer aktuellen Warteschlange hinzu.
public void push(int x) {
current.add(x);
}
Der Haupttrick hier ist die Pop- Methode . Hier stellen wir alle Elemente bis auf das letzte in die tmp- Warteschlange . Und nun wird das letzte Element in der Warteschlange das erste gesendete Element.
public int pop() {
if (current.isEmpty()){
return -1;
}
int size = current.size();
for (int i = 0; i < size - 1; i ++){
tmp.add(current.poll());
}
int ret = current.poll();
current = tmp;
return ret;
}
Was ist mit der Top- Methode ? Diese Methode ähnelt pop :
public int top() {
if (current.isEmpty()){
return -1;
}
int size = current.size();
for (int i = 0; i < size - 1; i ++){
tmp.add(current.poll());
}
int ret = current.peek();
tmp.add(current.poll());
current = tmp;
return ret;
}
Und für die letzte leere Methode sollten wir einfach die aktuelle Warteschlange überprüfen:
public boolean empty() {
return current.isEmpty();
}
Zweite Lösung
Bei dieser Option verwenden wir keinen zusätzlichen Speicher:static class MyStack {
private Queue<Integer> current;
public MyStack2() {
current = new ArrayDeque<>();
}
}
Die Grundidee hierbei ist die Push- Methode . Wir fügen das aktuelle Element hinzu und verschieben dann die Elemente vor dem aktuellen an das Ende der Warteschlange. Wenn wir beispielsweise eine Warteschlange mit den Elementen [2,1] haben, verwenden wir Push 3 – und erhalten die Warteschlange [3,2,1], dann [1,3,2], [2,1,3] und. .. und alles.
public void push(int x) {
current.add(x);
int size = current.size();
for (int i = 0; i < size-1; i ++){
current.add(current.poll());
}
}
Hier haben wir bereits das richtige Element und den Anfang der Warteschlange für alle anderen Methoden.
public int pop() {
return current.poll();
}
public int top() {
return current.peek();
}
public boolean empty() {
return current.isEmpty();
}
Methoden der Java Math-Klasse
Quelle: Medium In diesem Beitrag erfahren Sie mehr über die Fähigkeiten und den Umfang der Java Math-Klasse. Ein Teil des Java.lang.Math- Pakets in der Java-Sprache ist die Math- Klasse . Diese Klasse stellt uns einige vordefinierte Methoden wie min , max , sqrt und andere zur Verfügung. Nachfolgend finden Sie Beispiele einiger Methoden aus dem Mathematikunterricht , die wir in unserer täglichen Arbeit verwenden können. 1. Die Methode max() gibt die größere Zahl zurück, die im Parameter übergeben wurde:System.out.println(Math.max(5,3));
OUTPUT: 5
2. Die Methode sqrt() zeigt uns die Quadratwurzel der als Argument übergebenen Zahl:
System.out.println(Math.sqrt(4));
OUTPUT: 2.0
3. Die Methode random() gibt eine Zufallszahl im Bereich von 0 bis 1 zurück.
System.out.println(Math.random());
OUTPUT: 0.8685304957692445
4. Die abs()- Methode gibt den absoluten positiven Wert jeder negativen Zahl zurück. Wenn wir es beispielsweise als 0 übergeben, wird als Ergebnis 0 zurückgegeben.
System.out.println(Math.abs(-4));
OUTPUT: 4
System.out.println(Math.abs(4));
OUTPUT: 4
System.out.println(Math.abs(0));
OUTPUT: 0
5. Die Methode floor() gibt einen Double-Wert zurück, der kleiner oder gleich dem Argument und gleich der nächsten mathematischen Ganzzahl ist.
System.out.println(Math.floor(-1.2));
OUTPUT: -2.0
System.out.println(Math.floor(1.2));
OUTPUT: 2.0
GO TO FULL VERSION