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. Nous 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 :
Détails supplémentaires:
Exemple 1: Saisir
Sortir
[nul, nul, nul, 2, 2, faux]
Explication
|
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. Une 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
GO TO FULL VERSION