Heim  >  Artikel  >  Web-Frontend  >  So verwenden Sie JS, um einen Stack mit der getMin-Funktion zu implementieren

So verwenden Sie JS, um einen Stack mit der getMin-Funktion zu implementieren

不言
不言Original
2018-07-17 17:08:562009Durchsuche

In diesem Artikel wird hauptsächlich die Verwendung von JS zum Implementieren eines Stapels mit der getMin-Funktion vorgestellt. Er hat einen gewissen Referenzwert. Jetzt kann ich ihn mit allen teilen, die ihn benötigen.

Vorwort:

Der Job wurde bestätigt~ Ich werde den Job nächsten Montag offiziell antreten. Logischerweise sollte ich eine gute Woche haben, aber ich fühle mich immer unwohl Herzlichst habe ich immer das Gefühl, dass ich auf diesem Niveau wirklich zu gut bin. Es ist jetzt besser, mehr Bücher zu lesen und zu lernen Alles sehr klassische Bücher, aber nachdem ich einen Job gefunden habe, habe ich sie fast alle verstaubt. Jetzt hoffe ich, dass ich eine gute Lerngewohnheit entwickeln kann. Selbst wenn ich bei der Arbeit beschäftigt bin, muss ich mir etwas Zeit nehmen, um mir neues Wissen anzueignen. Zweitens hoffe ich, dass ich eine gute Angewohnheit entwickeln kann, mich selbst aufzuzeichnen, wenn man hart arbeitet Man kann sich auch sagen, wenn man faul sein möchte: „Hey, fauler Kerl, beeil dich und lerne, sonst wirst du dich selbst bemitleiden, der hart gearbeitet hat, und es in Zukunft bereuen.“ Fangen Sie an~

Text:

[Titel] Implementieren Sie einen speziellen Stapel, der auf den Grundfunktionen des Stapels basiert Die Operation zur Rückgabe des kleinsten Elements im Stapel ist implementiert.

[Anforderungen] 1. Die zeitliche Komplexität von Pop-, Push- und getMin-Operationen beträgt O(1)

2. Der entworfene Stapeltyp kann vorhandene Stapelstrukturen verwenden

[Idee] Definieren Sie ein StackData und ein StackMin. StackData wird zum Speichern tatsächlicher Daten verwendet, und StackMin wird zum Speichern des Mindestwerts in StackData verwendet. Schreiben Sie die Pop- und Push-Methoden neu, um eine Datensynchronisierung zwischen stackData und stackMin zu erreichen.

[Implementierung] Es gibt zwei Möglichkeiten, es zu implementieren. Weitere Informationen finden Sie im Code.

         // 方法一 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();    //抛出异常

          //方法二 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();    //抛出异常

Nachwort:

Dies soll als Serie geschrieben werden, und die Hauptreferenz ist Zuo Dashens „Programmer's Code Interview Guide – Optimale Lösungen für Algorithmen- und Datenstrukturfragen berühmter IT-Unternehmen“. In dem Buch verwendet Zuo Dashen JAVA, um es zu implementieren, sodass ich es im Grunde verstehen kann, aber weil ich JS verwende, finde ich es immer a Es ist sowieso etwas uninteressant, also kann ich die JS-Schreibmethode genauso gut selbst implementieren und teilen, was als Motivation für mich angesehen werden kann, weiter durchzuhalten. Da ich ein Neuling bin, wird es das auf jeden Fall tun Ich hoffe, dass alle Experten mir helfen können, bitte geben Sie mir einen Rat~Kangsang Amida~Anigado~Danke~

Verwandte Empfehlungen:

Was ist die Methode zum Übertragen von Funktionen in js

Verständnis der tatsächlichen Parameter, formalen Parameter und Abschlüsse von js-Funktionen

Das obige ist der detaillierte Inhalt vonSo verwenden Sie JS, um einen Stack mit der getMin-Funktion zu implementieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn