Maison > interface Web > js tutoriel > Comment utiliser JS pour implémenter une pile avec la fonction getMin

Comment utiliser JS pour implémenter une pile avec la fonction getMin

不言
Libérer: 2018-07-17 17:08:56
original
2064 Les gens l'ont consulté

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(&#39;Stack is empty!&#39;);
        }
        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(&#39;Stack is empty!&#39;);
        }
        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();    //抛出异常
Copier après la connexion

          //方法二 1 class MyStack {
    constructor() {
        this.stackData = [];
        this.stackMin = [];
    }
    push() {
        let args = arguments[0];
        if (typeof args === &#39;number&#39;) {
            //将新数据压入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(&#39;Stack is empty!&#39;);
        }
        let p = this.stackData.pop();
        this.stackMin.pop();
        return p;
    }
    getMin() {
        if (this.stackMin.length === 0) {
            throw new Error(&#39;Stack is empty!&#39;);
        }
        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();    //抛出异常
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal