30. 包含 min 函数的栈

72 阅读1分钟

题干

我的解答

class MinStack {
    stack:Array<number>
    constructor() {
        this.stack = [];
    }

    push(x: number): void {
        this.stack.push(x);
    }

    pop(): void {
        this.stack.pop();
    }

    top(): number {
        if(this.stack.length==0)
            return
        return this.stack[this.stack.length-1];
    }

    min(): number {
        if(this.stack.length==0)
            return
        let Min:number = this.stack[0];
        for(let a of this.stack){
            if(Min>a){
                Min=a;
            }
        }
        return Min
    }
}

结果

示例代码

class MinStack {
    stk: number[]
    help: number[]
    constructor() {
        this.stk = []
        this.help = [Infinity]
    }

    push(x: number): void {
        this.stk.push(x)
        const e = Math.min(this.help[this.help.length-1], x)
        this.help.push(e)
    }

    pop(): void {
        this.stk.pop()
        this.help.pop()
    }

    top(): number {
        return this.stk[this.stk.length-1]
    }

    min(): number {
        return this.help[this.help.length-1]
    }
}

分析

  • 使用了两个数组,一个是原始的,另一个是用于min的数组,在push的时候要判断下只保留最小的,这样的话两个数组如果长度一致,min数组的最后一位就是原始数组最小的了