JavaRush /Java-Blog /Random-DE /Kaffeepause Nr. 162. Implementierung eines Stapels mithil...

Kaffeepause Nr. 162. Implementierung eines Stapels mithilfe einer Warteschlange. Methoden der Java Math-Klasse

Veröffentlicht in der Gruppe Random-DE

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. Kaffeepause Nr. 162.  Implementierung eines Stapels mithilfe einer Warteschlange.  Methoden der Java Math-Klasse - 1Wir 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:

  • void push(int x) Schiebe Element x an die Spitze des Stapels.

  • int pop() Entfernt das Element oben im Stapel und gibt es zurück.

  • int top() Gibt das Element oben im Stapel zurück.

  • boolean empty() Gibt „true“ zurück , wenn der Stapel leer ist, andernfalls „false“ .

Weitere Details:

  • Sie sollten nur Standardwarteschlangenoperationen verwenden, was bedeutet, dass nur Push-to-Back- , Peek/Pop-von-Front- , Size- und Is-Leer -Operationen zulässig sind .

  • Abhängig von Ihrer Programmiersprache wird die Warteschlange möglicherweise nicht nativ unterstützt. Sie können eine Warteschlange jedoch mithilfe einer Liste oder einer Deque (Doppelwarteschlange) simulieren, wenn Sie nur Standardwarteschlangenoperationen verwenden.

Beispiel 1:

Eingang

["MyStack", "push", "push", "top", "pop", "empty"]
[[], [1], [2], [], [], []]

Ausgabe

[null, null, null, 2, 2, falsch]

Erläuterung

MyStack myStack = new MyStack();
myStack.push(1);
myStack.push(2);
myStack.top(); // возвращает 2
myStack.pop(); // возвращает 2
myStack.empty(); // возвращает False

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. Kaffeepause Nr. 162.  Implementierung eines Stapels mithilfe einer Warteschlange.  Methoden der Java-Mathe-Klasse – 2Ein 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
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION