(栈) LeetCode155. 最小栈

题目:
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。

  • push(x) -- 将元素 x 推入栈中。
  • pop() -- 删除栈顶的元素。
  • top() -- 获取栈顶元素。
  • getMin() -- 检索栈中的最小元素。

示例:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.

解答一 基栈+辅助栈
思路:
1、辅助栈保存最小值

var MinStack = function() {
    this.stack = [];
    this.minStack = [];
};

MinStack.prototype.push = function(x) {
    if(!this.stack.length || x <= this.stack[this.stack.length - 1]){
        this.stack.push(x);
    }
    this.minStack.push(x);
};

MinStack.prototype.pop = function() {
    let pop = this.minStack.pop();
    if(pop === this.stack[this.stack.length - 1]){
        this.stack.pop();
    }
};
MinStack.prototype.top = function() {
    return this.minStack[this.minStack.length - 1];
};
MinStack.prototype.getMin = function() {
    return this.stack[this.stack.length - 1];  
};

解答二 基栈
思路:
1、栈内压入新的最小值时,将上一次的最小值一起压进去;
2、最小值弹出栈时,将最小值之前的上一次的最小值存入this.min并弹出栈

var MinStack = function() {
    this.min = Number.MAX_SAFE_INTEGER;
    this.minStack = [];
};
MinStack.prototype.push = function(x) {
    if(x <= this.min){
        this.minStack.push(this.min);
        this.min = x;
    }
    this.minStack.push(x);
};

MinStack.prototype.pop = function() {
    let pop = this.minStack.pop();
    if(this.min === pop){
        this.min = this.minStack.pop();
    }
};
MinStack.prototype.top = function() {
    return this.minStack[this.minStack.length - 1];
};
MinStack.prototype.getMin = function() {
    return this.min;  
};

你可能感兴趣的:((栈) LeetCode155. 最小栈)