Cet article présente principalement comment utiliser JS pour implémenter une pile avec la fonction getMin. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer
Préface :
Le poste a été confirmé ~ Je rejoindrai officiellement le poste lundi prochain, logiquement, je devrais pouvoir passer une bonne semaine, mais je suis toujours mal à l'aise dans mon état d'esprit. cœur. J'ai toujours l'impression que je suis vraiment trop bon à ce niveau. Il vaut mieux lire plus de livres et étudier davantage pendant que tu as ton temps libre maintenant. J'ai donc sorti les livres que j'avais achetés à l'école auparavant et je les ai lus. tous des livres très classiques, mais après avoir trouvé un travail, je me suis laissé aller à eux. Presque tous sont restés sur les étagères en train de ramasser la poussière. Premièrement, j'espère pouvoir développer une bonne habitude d'étudier. Même lorsque je suis occupé au travail, je dois encore prendre du temps pour acquérir de nouvelles connaissances. Deuxièmement, j'espère pouvoir développer une bonne habitude de m'enregistrer lorsque vous travaillez dur. On peut aussi se dire quand on veut être paresseux : "Hé, paresseux, dépêche-toi et étudie, sinon tu te sentiras vraiment désolé pour toi qui as travaillé dur et tu le regretteras à l'avenir." commencer~Texte :
[Titre] Implémenter une pile spéciale, dans l'implémentation Basé sur les fonctions de base de la pile, le l'opération de renvoi du plus petit élément de la pile est implémentée. [Exigences] 1. La complexité temporelle des opérations pop, push et getMin est O(1) 2. Le type de pile conçu peut utiliser les structures de pile existantes [Idée] Définissez un stackData et un stackMin. stackData est utilisé pour stocker les données réelles, et stackMin est utilisé pour stocker la valeur minimale dans stackData. Réécrivez les méthodes pop et push pour réaliser la synchronisation des données entre stackData et stackMin. [Implémentation] Il existe deux façons de l'implémenter, voir le code pour plus de détails.// 方法一 1 class MyStack { constructor() { this.stackData = []; this.stackMin = []; } push() { let args = arguments[0]; if (typeof args === 'number') { //将新数据压入stackData栈中 this.stackData.push(args); //判断是否将新数据压入stackMin栈中 if (this.stackMin.length > 0) { //stackMin栈不空,需要判断当前数据是否小于等于stackMin的栈顶元素 let top = this.getMin(); if (args <= top) { this.stackMin.push(args); } } else { //stackMin栈空,则压入 this.stackMin.push(args); } } } pop() { if (this.stackMin.length === 0) { throw new Error('Stack is empty!'); } let p = this.stackData.pop(); let top = this.getMin(); if (p === top) { this.stackMin.pop(); } return p; } getMin() { if (this.stackMin.length === 0) { throw new Error('Stack is empty!'); } let len = this.stackMin.length; return this.stackMin[len - 1]; } } let s = new MyStack(); s.push(4); s.push(2); s.push(1); console.log(s.getMin()); s.pop(); console.log(s.getMin()); s.pop(); s.pop(); s.pop(); //抛出异常
//方法二 1 class MyStack { constructor() { this.stackData = []; this.stackMin = []; } push() { let args = arguments[0]; if (typeof args === 'number') { //将新数据压入stackData栈中 this.stackData.push(args); //判断是否将新数据压入stackMin栈中 if (this.stackMin.length > 0) { //stackMin栈不空,需要判断当前数据是否小于等于stackMin的栈顶元素 let top = this.getMin(); if (args <= top) { this.stackMin.push(args); } else { this.stackMin.push(top); } } else { //stackMin栈空,则压入 this.stackMin.push(args); } } } pop() { if (this.stackMin.length === 0) { throw new Error('Stack is empty!'); } let p = this.stackData.pop(); this.stackMin.pop(); return p; } getMin() { if (this.stackMin.length === 0) { throw new Error('Stack is empty!'); } let len = this.stackMin.length; return this.stackMin[len - 1]; } } let s = new MyStack(); s.push(4); s.push(2); s.push(1); console.log(s.getMin()); s.pop(); console.log(s.getMin()); s.pop(); s.pop(); // s.pop(); //抛出异常
Postface :
Ceci est prévu pour être écrit sous forme de série, le principal la référence est le "Programmer's Code Interview Guide - Optimal Solutions to Algorithm and Data Structure Questions from Famous IT Companies" de Zuo Dashen. Zuo Dashen utilise JAVA pour implémenter le livre, donc je peux fondamentalement le comprendre, mais parce que j'utilise JS, j'ai toujours le sentiment que Je ne le pensais presque pas. De toute façon, c'est juste pour apprendre, donc autant implémenter moi-même la méthode d'écriture JS et la partager, ce qui peut être considéré comme une motivation pour moi de continuer à persévérer. Je suis un débutant, il y aura certainement plus ou moins des problèmes. J'espère que vous tous, les grands, n'hésitez pas à me donner quelques conseils pendant que vous riez~Kangsang Amida~Anigado~Merci~Merci~Recommandations associées :Fonctions en js Quelle est la méthode de transmission ?
Compréhension des paramètres réels, des paramètres formels et des fermetures des fonctions js
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!