1381. Concevoir une pile avec une opération d'incrémentation
Difficulté :Moyen
Sujets :Array, Stack, Design
Concevez une pile qui prend en charge les opérations d'incrémentation sur ses éléments.
Implémentez la classe CustomStack :
Exemple 1 :
["CustomStack","push","push","pop","push","push","push","increment","increment","pop","pop","pop","pop"] [[3],[1],[2],[],[2],[3],[4],[5,100],[2,100],[],[],[],[]]
[null,null,null,2,null,null,null,null,null,103,202,201,-1]
CustomStack stk = new CustomStack(3); // Stack is Empty [] stk.push(1); // stack becomes [1] stk.push(2); // stack becomes [1, 2] stk.pop(); // return 2 --> Return top of the stack 2, stack becomes [1] stk.push(2); // stack becomes [1, 2] stk.push(3); // stack becomes [1, 2, 3] stk.push(4); // stack still [1, 2, 3], Do not add another elements as size is 4 stk.increment(5, 100); // stack becomes [101, 102, 103] stk.increment(2, 100); // stack becomes [201, 202, 103] stk.pop(); // return 103 --> Return top of the stack 103, stack becomes [201, 202] stk.pop(); // return 202 --> Return top of the stack 202, stack becomes [201] stk.pop(); // return 201 --> Return top of the stack 201, stack becomes [] stk.pop(); // return -1 --> Stack is empty return -1.
Contraintes :
Indice :
Solution :
Nous pouvons suivre une implémentation typique de pile mais avec une méthode supplémentaire qui permet d'incrémenter les k éléments du bas d'une valeur donnée. L'opération d'incrémentation parcourra les k premiers éléments de la pile et ajoutera la valeur à chacun.
Nous implémenterons cette pile dans PHP 5.6, en utilisant un tableau pour représenter la pile. Les opérations principales sont :
Implémentons cette solution en PHP : 1381. Concevoir une pile avec une opération d'incrémentation
<?php class CustomStack { /** * @var array */ private $stack; /** * @var int */ private $maxSize; /** * Constructor to initialize the stack with a given maxSize * * @param Integer $maxSize */ function __construct($maxSize) { ... ... ... /** * go to ./solution.php */ } /** * Push an element to the stack if it has not reached the maxSize * * @param Integer $x * @return NULL */ function push($x) { ... ... ... /** * go to ./solution.php */ } /** * Pop the top element from the stack and return it, return -1 if the stack is empty * * @return Integer */ function pop() { ... ... ... /** * go to ./solution.php */ } /** * Increment the bottom k elements of the stack by val * * @param Integer $k * @param Integer $val * @return NULL */ function increment($k, $val) { ... ... ... /** * go to ./solution.php */ } } /** * Your CustomStack object will be instantiated and called as such: * $obj = CustomStack($maxSize); * $obj->push($x); * $ret_2 = $obj->pop(); * $obj->increment($k, $val); */ // Example usage $customStack = new CustomStack(3); // Stack is Empty [] $customStack->push(1); // stack becomes [1] $customStack->push(2); // stack becomes [1, 2] echo $customStack->pop() . "\n"; // return 2, stack becomes [1] $customStack->push(2); // stack becomes [1, 2] $customStack->push(3); // stack becomes [1, 2, 3] $customStack->push(4); // stack still [1, 2, 3], maxSize is 3 $customStack->increment(5, 100); // stack becomes [101, 102, 103] $customStack->increment(2, 100); // stack becomes [201, 202, 103] echo $customStack->pop() . "\n"; // return 103, stack becomes [201, 202] echo $customStack->pop() . "\n"; // return 202, stack becomes [201] echo $customStack->pop() . "\n"; // return 201, stack becomes [] echo $customStack->pop() . "\n"; // return -1, stack is empty ?> <h3> Explication: </h3> <ol> <li> <p><strong>pousser ($x)</strong> :</p> <ul> <li>Nous utilisons array_push pour ajouter des éléments à la pile. Nous vérifions si la taille actuelle de la pile est inférieure à maxSize. Si c'est le cas, on pousse le nouvel élément.</li> </ul> </li> <li> <p><strong>pop()</strong> :</p> <ul> <li>On vérifie si la pile est vide en utilisant empty($this->stack). S'il n'est pas vide, nous insérons l'élément supérieur en utilisant array_pop et le renvoyons. S'il est vide, on renvoie -1.</li> </ul> </li> <li> <p><strong>incrément($k, $val)</strong> :</p> <ul> <li>Nous calculons le minimum de k et la taille actuelle de la pile pour déterminer le nombre d'éléments à incrémenter. Nous parcourons ensuite ces éléments, en ajoutant val à chacun.</li> </ul> </li> </ol> <h3> Exemple d'exécution : </h3> <p>Pour les opérations de saisie :<br> </p> <pre class="brush:php;toolbar:false">["CustomStack","push","push","pop","push","push","push","increment","increment","pop","pop","pop","pop"] [[3],[1],[2],[],[2],[3],[4],[5,100],[2,100],[],[],[],[]]
Le résultat sera :
[null, null, null, 2, null, null, null, null, null, 103, 202, 201, -1]
Cette sortie est basée sur les éléments suivants :
Liens de contact
Si vous avez trouvé cette série utile, pensez à donner une étoile au référentiel sur GitHub ou à partager la publication sur vos réseaux sociaux préférés ?. Votre soutien signifierait beaucoup pour moi !
Si vous souhaitez du contenu plus utile comme celui-ci, n'hésitez pas à me suivre :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!