JavaRush /Blog Java /Random-FR /Pause café #162. Implémentation d'une pile utilisant une ...

Pause café #162. Implémentation d'une pile utilisant une file d'attente. Méthodes de classe Java Math

Publié dans le groupe Random-FR

Implémentation d'une pile à l'aide d'une file d'attente

Source : Hackernoon Le contenu de cet article est consacré à la résolution du problème de l'implémentation d'une pile utilisant seulement deux files d'attente. Pause café #162.  Implémentation d'une pile utilisant une file d'attente.  Méthodes de classe Java Math - 1Nous avons un problème avec Leetcode :

Implémentez une pile dernier entré, premier sorti (LIFO) en utilisant seulement deux files d'attente. La pile implémentée doit prendre en charge toutes les fonctions d'une pile normale ( push , top , pop et vide ).

Implémentez la classe MyStack :

  • void push(int x) Poussez l'élément x vers le haut de la pile.

  • int pop() Supprime l'élément en haut de la pile et le renvoie.

  • int top() Renvoie l'élément en haut de la pile.

  • boolean empty() Renvoie true si la pile est vide, false sinon .

Détails supplémentaires:

  • Vous ne devez utiliser que les opérations de file d'attente standard, ce qui signifie que seules les opérations push to back , peek/pop from front , size et is empty sont autorisées .

  • Selon votre langage de programmation, la file d'attente peut ne pas être prise en charge de manière native. Mais vous pouvez simuler une file d'attente à l'aide d'une liste ou d'un deque (double file d'attente) si vous utilisez uniquement des opérations de file d'attente standard.

Exemple 1:

Saisir

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

Sortir

[nul, nul, nul, 2, 2, faux]

Explication

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

La solution du problème

Première option

Dans la première solution, nous utiliserons de la mémoire supplémentaire :
static class MyStack {
  private Queue<Integer> current;
  private Queue<Integer> tmp;

  public MyStack() {
    current = new ArrayDeque<>();
    tmp = new ArrayDeque<>();
  }
Nous avons besoin d'une file d'attente supplémentaire pour cette solution. Commençons par pousser . Pour une opération push , nous ajoutons simplement un nouvel élément à notre file d'attente actuelle.
public void push(int x) {
  current.add(x);
}
L'astuce principale ici est la méthode pop . Ici, nous mettons tous les éléments sauf le dernier dans la file d'attente tmp . Et maintenant, le dernier élément de la file d'attente devient le premier élément envoyé.
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;
}
Qu'en est-il de la méthode supérieure ? Cette méthode est similaire à 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;
}
Et pour la dernière méthode vide , nous devrions simplement vérifier la file d'attente actuelle :
public boolean empty() {
  return current.isEmpty();
}

Deuxième solution

Dans cette option, nous n'utiliserons pas de mémoire supplémentaire :
static class MyStack {

  private Queue<Integer> current;

  public MyStack2() {
    current = new ArrayDeque<>();
  }
}
L'idée principale ici est la méthode push . Nous ajoutons l'élément actuel, puis déplaçons les éléments avant l'élément actuel vers la fin de la file d'attente. Par exemple, si nous avons une file d'attente avec les éléments [2,1], nous utilisons push 3 - et obtenons la file d'attente [3,2,1], puis [1,3,2], [2,1,3] et. .. et tout.
public void push(int x) {
  current.add(x);
  int size = current.size();

  for (int i = 0; i < size-1; i ++){
    current.add(current.poll());
  }
}
Ici, nous avons déjà l'élément correct et le début de la file d'attente pour toutes les autres méthodes.
public int pop() {
  return current.poll();
}

public int top() {
  return current.peek();
}

public boolean empty() {
  return current.isEmpty();
}

Méthodes de classe Java Math

Source : Medium Dans cet article, vous découvrirez les capacités et la portée de la classe Java Math. Pause café #162.  Implémentation d'une pile utilisant une file d'attente.  Méthodes de cours de mathématiques Java - 2Une partie du package Java.lang.Math dans le langage Java est la classe Math . Cette classe nous fournit des méthodes prédéfinies comme min , max , sqrt et autres. Vous trouverez ci-dessous des exemples de méthodes du cours de mathématiques que nous pouvons utiliser dans notre travail quotidien. 1. La méthode max() renvoie le plus grand nombre passé en paramètre :
System.out.println(Math.max(5,3));
OUTPUT: 5
2. La méthode sqrt() nous montrera la racine carrée du nombre passé en argument :
System.out.println(Math.sqrt(4));
OUTPUT: 2.0
3. La méthode random() renvoie un nombre aléatoire compris entre 0 et 1.
System.out.println(Math.random());
OUTPUT: 0.8685304957692445
4. La méthode abs() renvoie la valeur positive absolue de tout nombre négatif. Par exemple, si nous le passons à 0, il renverra 0 en conséquence.
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. La méthode floor() renvoie une valeur double inférieure ou égale à l'argument et égale à l'entier mathématique le plus proche.
System.out.println(Math.floor(-1.2));
OUTPUT: -2.0
System.out.println(Math.floor(1.2));
OUTPUT: 2.0
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION